Вопрос проверяет понимание различий между императивным и декларативным подходами к работе с коллекциями.
Iterator позволяет удалять элементы из исходной коллекции.Stream не предназначен для модификации источника данных.
При работе со Stream обычно создаётся новая коллекция.
Удаление через Iterator происходит безопасно и пошагово.Stream ориентирован на преобразование данных, а не на их изменение.
Разница между этими подходами концептуальная.
IteratorIterator предоставляет явный контроль над обходом и изменением коллекции.
Пример:
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
if (it.next() < 0) {
it.remove();
}
}
Особенности:
Меняется исходная коллекция
Удаление безопасно
Подходит для пошаговой логики
StreamStream — это абстракция для обработки данных.
Пример:
List<Integer> result = list.stream()
.filter(x -> x >= 0)
.toList();
Особенности:
Исходная коллекция не изменяется
Создаётся новая коллекция
Код более декларативный
StreamStream не гарантирует порядок выполнения
Возможна параллельная обработка
Побочные эффекты ломают контракт Stream API
Iterator используется для изменения коллекции, Stream — для построения новых представлений данных.