从列表中删除具有重复ID的对象?

时间:2018-02-08 15:07:08

标签: java list duplicates

如何删除列表中具有相同ID的所有对象?

例如,在以下列表中:

    Person person1 = new Person();
    person1.setId("1");

    Person person2 = new Person();
    person2.setId("1"); //ie same as Person1

    Person person3 = new Person();
    person3.setId("2");

    List<Person> PersonList = new ArrayList<>();
    PersonList.add(person1);
    PersonList.add(person2);
    PersonList.add(person3);

下面我的方法适用于上述方法,但是当有多个副本时,我怎么能解决这个问题呢?

public List<Person> removeDuplicatesFromList(List<Person> personList){

        for (int i = 0; i < personList.size(); i++) {
            for (int j = i+1; j < personList.size(); j++) {

                if(personList.get(i).getId().equalsIgnoreCase(personList.get(j).getId())){

                    personList.remove(personList.get(j));
                }else{

                }
            }
        }

        return personList;
    }

2 个答案:

答案 0 :(得分:1)

如@tobias_k已评论过,我建议您使用Map<String, Person>代替List<Person>。 这样可以避免重复,因此无需删除它们。

您修改过的代码会是这样的:

Person person1 = new Person();
person1.setId("1");

Person person2 = new Person();
person2.setId("1"); //i.e. same as person1

Person person3 = new Person();
person3.setId("2");

Map<String, Person> personMap = new HashMap<>();
personMap.put(person1.getId(), person1);
personMap.put(person2.getId(), person2);
personMap.put(person3.getId(), person3);

调用personMap.get("1")然后会person2, 并且personMap.get("2")会给person3

答案 1 :(得分:0)

您可以使用地图。使用key作为person id和person对象作为值

public List<Person> removeDuplicatesFromList(List<Person> personList){
   Map<String, Person> map = new HashMap<String, Person>();
   List<Person> newPersonList = new ArrayList<>();
   for(Person p:personList){
       map.put(p.getId(),p);
   }
   Iterator itr=map.keySet().iterator();
   while (itr.hasNext()) {
     String id =  itr.next().toString();
     newPersonList.add((Person)map.get(id));
    }
  return newPersonList;
 }