Чем отличается метод peek от forEach при работе с потоками в Stream API?

В Stream API Java методы peek и forEach имеют разные назначения и особенности:

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

Что ответить на собеседовании

В Stream API Java методы peek и forEach имеют разные назначения и особенности:

Подробный разбор

Ответ с пояснениями

В Stream API Java методы peek и forEach имеют разные назначения и особенности:

  • peek — промежуточная операция, которая позволяет выполнить действие над каждым элементом потока, не изменяя сам поток. Обычно используется для отладки или логирования. Поскольку это промежуточная операция, она лениво выполняется и не запускается, пока не вызовут терминальную операцию.
  • forEach — терминальная операция, которая выполняет действие над каждым элементом потока и завершает обработку. После вызова forEach поток считается потреблённым и не может быть использован дальше.

Пример:

Stream.of(1, 2, 3)
    .peek(i -> System.out.println("peek: " + i)) // отладка
    .map(i -> i * 2)
    .forEach(i -> System.out.println("forEach: " + i));

Здесь peek выводит элементы до преобразования, а forEach — после. Если вызвать только peek без терминальной операции, код не выполнится.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее