Предупреждение при удалении из ArrayList элемента при итерации
У меня список объектов. В цикле я хочу проверить равно ли введенные пользователем ицициалы, ициалам полей обьекта. И если это так то должен удаляться соответствующий элемент.
String lastName = scanner.nextLine();
String firstName = scanner.nextLine();
String patronymicName = scanner.nextLine();
for (int i = 0; i < admins.size(); i++){
if(lastName.equals(admins.get(i).getLastName()) && firstName.equals(admins.get(i).getFirstName()) &&
patronymicName.equals(admins.get(i).getPatronymicName())){
admins.remove(i);
}
}
При исполнении даного кода высвечивается предупреждение
Suspicious 'List.remove()' in loop
При этом элемент корректно удаляется. Как это можно исправить?
Ответы (1 шт):
Это предупреждение высвечивается, потому что вы пытаетесь удалить из листа элемент в то время, когда вы по нему итерируетесь. Это не безопасно, как написано в документации Oracle. Хоть java и допускает это, пользоваться этим не стоит. Единственный безопасный способ удалить элемент из List во время итерации по нему - это использование Iterator.
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext())
if(condition)iterator.remove();
Есть решения еще про использовании list.removeIF и ListIterator, но в документации Oracle рекомендуется все-же Iterator