如何删除列表中具有相同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;
}
答案 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;
}