Выбор ответа Junior Коллекции изнутри спрашивают часто обновлено

Удаление в foreach

Вопрос

Как правильно удалить из ArrayList<String> все пустые строки?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: list.removeIf(String::isEmpty). removeIf удаляет за один проход и безопасно.

Варианты ответа

  1. list.removeIf(String::isEmpty)правильный ответ
  2. В цикле for (String s : list) if (s.isEmpty()) list.remove(s);
  3. В цикле for (int i = 0; i < list.size(); i++) if (list.get(i).isEmpty()) list.remove(i);
  4. Через list.stream().filter(s -> !s.isEmpty()) без присваивания

Разбор

removeIf удаляет за один проход и безопасно. Удаление в foreach меняет modCount, и следующий next() итератора бросит ConcurrentModificationException. Цикл по индексу не падает, но пропускает элемент, сдвинувшийся на место удалённого (две пустые строки подряд). Стрим создаёт новую последовательность и не трогает исходный список.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме