Можете объяснить, как работает метод peek() в Java Stream API и в каких ситуациях его используют?
Ответ от нейросети
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() для изменения состояния или данных, так как это противоречит функциональному стилю и может привести к непредсказуемым результатам.