Предупреждение при удалении из 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 шт):

Автор решения: had0uken

Это предупреждение высвечивается, потому что вы пытаетесь удалить из листа элемент в то время, когда вы по нему итерируетесь. Это не безопасно, как написано в документации Oracle. Хоть java и допускает это, пользоваться этим не стоит. Единственный безопасный способ удалить элемент из List во время итерации по нему - это использование Iterator.

Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext())
            if(condition)iterator.remove();

Есть решения еще про использовании list.removeIF и ListIterator, но в документации Oracle рекомендуется все-же Iterator

→ Ссылка