根据自定义对象属性从arraylist中删除元素

mad*_*erz 5 java iterator arraylist

我有一个带有自定义对象的ArrayList.我想要的是从数组中删除重复项,具体取决于自定义对象的name属性.我试图使用Set person = new TreeSet(); 但它不起作用.我猜是因为该集合比较的是地址或其他名称属性.所以我现在正在尝试使用一个迭代器,它不会删除重复项.这就是我得到的;

ArrayList<Person> people = new ArrayList<Person>();
Iterator<Person> iterator = people.iterator();
while (iterator.hasNext()) {
   Person person = iterator.next();

   if (person.getName().equals(iterator.next().getName())) {
       iterator.remove();
   }
}
for (Person person : people) {
    System.out.println(person.getName());
}
Run Code Online (Sandbox Code Playgroud)

虽然我看到了重复的ArrayList,但它没有被修改.我需要一些帮助.谢谢!

Mat*_* Kh 10

我遇到了同样的情况,我想出了这个解决方案SortedSet.在这种情况下,那些导致set的比较器返回0的对象只会在Set中插入一次.

这是一个例子:

SortedSet<Person> persons = new TreeSet<Person>(new Comparator<Person>() {
    @Override
    public int compare(Person arg0, Person arg1) {
        return arg0.getName().compareTo(arg1.getName());
    }
});
Run Code Online (Sandbox Code Playgroud)

现在,如果你插入Person到你的persons,重复的(根据其name属性)将无法插入.

因此,您可以对您进行迭代list<Person>,并将其中的每个项目插入到您的persons集合中,并确保您不会有任何重复项.所以剩下的就像:

Iterator<Person> iterator = people.iterator();
while(iterator.hasNext()) {
    persons.add(iterator.next());
}
people.clear();
people.addAll(persons); //Now, your people does not contain duplicate names
Run Code Online (Sandbox Code Playgroud)