Sobes.tech
Назад к вопросам
Junior — Middle
65

Можете объяснить, как работает метод peek() в Java Stream API и в каких ситуациях его используют?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

Метод peek() в Java Stream API используется для промежуточного просмотра элементов потока без изменения самого потока. Он принимает Consumer — функцию, которая выполняет какое-то действие с каждым элементом, например, логирование или отладку.

Важно: peek() не изменяет элементы и не является терминальной операцией, поэтому для его выполнения поток должен быть «запущен» терминальной операцией (например, collect(), forEach()).

Пример использования:

List<String> names = Arrays.asList("Anna", "Bob", "Charlie");

List<String> filtered = names.stream()
    .filter(name -> name.length() > 3)
    .peek(name -> System.out.println("Filtered value: " + name))
    .collect(Collectors.toList());

Здесь peek() выводит отфильтрованные имена для отладки, не влияя на результат.

Используют peek() обычно для:

  • Отладки цепочек Stream
  • Логирования промежуточных значений
  • Выполнения побочных эффектов без изменения данных

Однако не стоит использовать peek() для изменения состояния или данных, так как это противоречит функциональному стилю и может привести к непредсказуемым результатам.