У меня есть ArrayList с пользовательскими объектами. Я хочу удалить дубликаты из массива в зависимости от свойства имени настраиваемого объекта. Я попытался выполнить это с помощью Set person = new TreeSet(); но он не работает. Я думаю, потому что набор сравнивает адреса или что-то еще, чем свойство name. Поэтому я теперь пытаюсь использовать итератор, который также не удаляет дубликаты. Это то, что я получил;удаление элемента из arraylist в зависимости от свойства настраиваемого объекта
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());
}
ArrayList не изменяется, хотя я вижу дубликаты в нем. Мне нужна помощь. Благодаря!
ли человек реализует равные и хэш-коды? Набор должен работать, если вы реализуете equals и hashcode – user1121883
Как правило, плохая идея для удаления во время итерации ... возможно, лучше создать отдельный список и фильтровать (добавлять) намеченные результаты в новый список. – vikingsteve
Почему это плохая идея удалить во время итерации? Это отличная идея, если получить доступ к ней только из одного потока.Если у вас нет других проблем – tgkprog