Выбор ответа Junior Коллекции изнутри спрашивают часто обновлено
Удаление в foreach
Вопрос
Как правильно удалить из ArrayList<String> все пустые строки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: list.removeIf(String::isEmpty). removeIf удаляет за один проход и безопасно.
Варианты ответа
list.removeIf(String::isEmpty)правильный ответ- В цикле
for (String s : list) if (s.isEmpty()) list.remove(s); - В цикле
for (int i = 0; i < list.size(); i++) if (list.get(i).isEmpty()) list.remove(i); - Через
list.stream().filter(s -> !s.isEmpty())без присваивания
Разбор
removeIf удаляет за один проход и безопасно. Удаление в foreach меняет modCount, и следующий next() итератора бросит ConcurrentModificationException. Цикл по индексу не падает, но пропускает элемент, сдвинувшийся на место удалённого (две пустые строки подряд). Стрим создаёт новую последовательность и не трогает исходный список.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: Arrays.asList и исходный массив
Следующий вопрос
Что выведет: удаление в foreach без исключения