Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: iterator, stream, api

В чем отличие удаления элементов через Iterator и через Stream?

Вопрос проверяет понимание различий между императивным и декларативным подходами к работе с коллекциями.

Короткий ответ

Iterator позволяет удалять элементы из исходной коллекции.
Stream не предназначен для модификации источника данных.
При работе со Stream обычно создаётся новая коллекция.
Удаление через Iterator происходит безопасно и пошагово.
Stream ориентирован на преобразование данных, а не на их изменение.

Длинный ответ

Разница между этими подходами концептуальная.

Удаление через Iterator

Iterator предоставляет явный контроль над обходом и изменением коллекции.

Пример:

Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
    if (it.next() < 0) {
        it.remove();
    }
}

Особенности:

  • Меняется исходная коллекция

  • Удаление безопасно

  • Подходит для пошаговой логики

Работа через Stream

Stream — это абстракция для обработки данных.

Пример:

List<Integer> result = list.stream()
    .filter(x -> x >= 0)
    .toList();

Особенности:

  • Исходная коллекция не изменяется

  • Создаётся новая коллекция

  • Код более декларативный

Почему нельзя удалять в Stream

  • Stream не гарантирует порядок выполнения

  • Возможна параллельная обработка

  • Побочные эффекты ломают контракт Stream API

Вывод

Iterator используется для изменения коллекции, Stream — для построения новых представлений данных.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#iterator

#stream

#api

Подпишись на Java Developer в телеграм