简体   繁体   English

如何避免重复列表 <Map<String, String> &gt;?

[英]How to avoid duplicates in List<Map<String, String>>?

I am having List<Map<String, String>> testList =new ArrayList<Map<String, String>>(); 我正在使用List<Map<String, String>> testList =new ArrayList<Map<String, String>>(); this way. 这条路。

I want to eleminate the duplicate maps out of the list based on first 5 keys, last 2 keys are optional. 我想根据前5个键从列表中消除重复的映射,最后2个键是可选的。

I tried using linkedhashset it worked fine, but this code is legacy code which has lot of comparators used and i cannot change that and use set. 我尝试使用linkedhashset可以正常工作,但是此代码是遗留代码,其中使用了很多比较器,并且我无法更改它和使用set。

Set<Map<String, String>> testList = new LinkedHashSet<Map<String, String>>();

ListOfMaps.java ListOfMaps.java

public class ListOfMaps {

    Map<String,String> map = new HashMap<String,String>();
    List<Map<String, String>> testList =new ArrayList<Map<String, String>>();

    public static void main(String[] args) {
        ListOfMaps ll = new ListOfMaps();
        ll.test();
    }
    public void test()
    {
        map = new HashMap<String,String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "30");
        map.put("gender", "M");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");
        testList.add(map);

        map = new HashMap<String,String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "31");
        map.put("gender", "F");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");
        testList.add(map);

        //This map object has duplicate keys year,standrad,age,gender,class same as like first map object . 
        //so this object should be ignore while adding into list.      
        //marks and score score keys are optional and need not to be verified.
        map = new HashMap<String,String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "30");
        map.put("gender", "M");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");
        testList.add(map);

        System.out.println(testList.toString());
    }
}

Can anyone help me in this issue? 谁能帮助我解决这个问题?

Thanks 谢谢

Having bad design it is hard to solve your problem. 设计不好,很难解决您的问题。 Here one way to solve your problem using extra Person class maintaining your legacy code. 这是使用额外的Person类维护您的遗留代码来解决问题的一种方法。

public class ListOfMaps {

    Map<String, String> map = new HashMap<String, String>();
    List<Map<String, String>> testList = new ArrayList<Map<String, String>>();
    Set<Person> st = new HashSet<>();

    /**
     * @param args
     */
    public static void main(String[] args) {
        ListOfMaps ll = new ListOfMaps();
        ll.test();
    }

    public void test() {
        map = new HashMap<String, String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "30");
        map.put("gender", "M");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");

        if (st.add(new Person(map)))
            testList.add(map);

        map = new HashMap<String, String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "31");
        map.put("gender", "F");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");
        if (st.add(new Person(map)))
            testList.add(map);

        // This map object has duplicate keys year,standrad,age,gender,class
        // same as like first map object .
        // so this object should be ignore while adding into list.
        // marks and score score keys are optional and need not to be verified.
        map = new HashMap<String, String>();
        map.put("year", "2015");
        map.put("standrad", "second");
        map.put("age", "30");
        map.put("gender", "M");
        map.put("class", "first");
        map.put("marks", "100");
        map.put("score", "200");
        if (st.add(new Person(map)))
            testList.add(map);

        System.out.println(testList.toString());
    }
}

class Person {
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((age == null) ? 0 : age.hashCode());
        result = prime * result + ((cls == null) ? 0 : cls.hashCode());
        result = prime * result + ((gender == null) ? 0 : gender.hashCode());
        result = prime * result
                + ((standard == null) ? 0 : standard.hashCode());
        result = prime * result + ((year == null) ? 0 : year.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Person)) {
            return false;
        }
        Person other = (Person) obj;
        if (age == null) {
            if (other.age != null) {
                return false;
            }
        } else if (!age.equals(other.age)) {
            return false;
        }
        if (cls == null) {
            if (other.cls != null) {
                return false;
            }
        } else if (!cls.equals(other.cls)) {
            return false;
        }
        if (gender == null) {
            if (other.gender != null) {
                return false;
            }
        } else if (!gender.equals(other.gender)) {
            return false;
        }
        if (standard == null) {
            if (other.standard != null) {
                return false;
            }
        } else if (!standard.equals(other.standard)) {
            return false;
        }
        if (year == null) {
            if (other.year != null) {
                return false;
            }
        } else if (!year.equals(other.year)) {
            return false;
        }
        return true;
    }

    String year, standard, age, gender, cls, marks, score;

    public Person(String year, String standard, String age, String gender,
            String cls, String marks, String score) {
        this.year = year;
        this.standard = standard;
        this.age = age;
        this.gender = gender;
        this.cls = cls;
        this.marks = marks;
        this.score = score;
    }

    public Person(Map<String, String> map) {
        this.year = map.get("year");
        this.standard = map.get("standrad");
        this.age = map.get("age");
        this.gender = map.get("gender");
        this.cls = map.get("class");
        this.marks = map.get("marks");
        this.score = map.get("score");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何映射地图 <String, List<String> &gt;在休眠状态 - How to map Map<String, List<String>> in hibernate 如何转换地图 <String, List<String> &gt;到地图 <String, String> 在java 8中 - How to Convert a Map<String, List<String>> to Map<String, String> in java 8 如何转换列表<map<string, object> > 列出<map<string, string> > </map<string,></map<string,> - How to Convert List<Map<String, Object>> to List<Map<String, String>> 使用地图在数组列表中查找重复项 <String, Integer> 输入顺序 - Find duplicates in array list using Map<String, Integer> with input order 删除列表中的重复项<map<string, object> &gt; 在 java 中使用流</map<string,> - Remove duplicates in List<Map<String, Object>> using Streams in java 如何转换列表<map<string, string> &gt; 列出<map<string, map<string, string> &gt;&gt; </map<string,></map<string,> - how to convert List<Map<String, String>> to List<Map<String, Map<String, String>>> 如何将Map <String,string>添加到java中的Map <String,List <Object >>中 - How to add Map<String, string> into Map<String, List<Object>> in java 如何将java对象列表转换为Map <String, Map<String, String> &gt; - How to convert a list of java objects to Map<String, Map<String, String>> 如何转换列表<map<string,object> > 至 Map<string, string> ? </string,></map<string,object> - How to convert List<Map<String,Object>> to Map<String, String>? android-如何排序列表 <Map<String, String> &gt; - android - How to sort List<Map<String, String>>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM