Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
Наука · 7 октября 2026 г.
📌 Stream API: забудьте про peek()
📌 Stream API: забудьте про peek() Метод peek() в Java Stream API выглядит удобным для отладки, но его использование в реальном коде часто приводит к проблемам. ⚠️ Почему не стоит полагаться на peek()? * peek() — промежуточная операция, которая не гарантирует вызов функции для каждого элемента стрима. * Поведение зависит от терминальной операции: например, при некоторых оптимизациях JDK (особенно в параллельных стримах) вызов peek() может быть пропущен или работать непредсказуемо. 💡 Пример опасного кода: List<String> names = Stream.of("Java", "Spring", "Hibernate") .peek(System.out::println) // 👈 анти-паттерн! .collect(Collectors.toList()); 🧠 Лучший подход: используйте peek() исключительно для дебага, но никогда — для изменения состояния или важных операций. ✅ Правильная замена: Если нужно выполнить действие над каждым элементом, используйте явный и безопасный подход: List<String> names = Stream.of("Java", "Spring", "Hibernate") .map(name -> { log.info("Processing: {}", name); // или другая логика return name; }) .collect(Collectors.toList()); Или вообще вынесите логику за пределы стрима. 🧹 Держите код понятным и безопасным — забудьте про peek(). 👉 @BookJava