TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.25K subscribers
Post #2186 1.31K
Почему Stream.peek не стоит использовать для бизнес-логики?

peek выглядит удобным способом вставить действие внутрь stream pipeline. Часто туда кладут логирование, метрики или даже изменение объекта.

Например, такой код кажется коротким:
users.stream()
.peek(User::activate)
.toList();


Проблема в том, что peek задуман как инструмент для отладки и наблюдения за элементами, а не как основной шаг бизнес-логики.

Пока нет terminal operation, ничего не выполняется:
users.stream()
.peek(User::activate);


В этом примере activate вообще не вызовется, потому что pipeline только описан, но не запущен.

Ещё хуже, когда поведение зависит от terminal operation. Например, count может быть оптимизирован так, что часть промежуточных действий не выполняется ожидаемым способом.

Если нужно изменить объекты явно, лучше использовать обычный цикл:
for (User user : users) {
user.activate();
}


Если нужно получить новые значения, лучше использовать map:
List result = users.stream()
.map(UserDto::from)
.toList();


А peek оставить для временной диагностики:
users.stream()
.peek(user -> log.debug("user {}", user.id()))
.toList();


👉 Java Ready | #совет
  • 👍 10
  • ❤ 5
  • 🔥 2
  • 🤝 1
More from @java_ready
  1. Oct 5, 2026Почему после Stream.toList() нельзя добавить элемент? При работе со Stream часто нужно соб…
  2. Oct 5, 2026Как оплачивать зарубежные сервисы в 2026 году? Можно бегать между посредниками и бояться б…
  3. Oct 5, 2026Находим три самых популярных товара! Есть поток покупок с повторяющимися названиями. Постр…
  4. Oct 2, 2026photo post
  5. Oct 1, 2026Следим за появлением файлов в папке через WatchService! Создадим наблюдатель и зарегистрир…
  6. Oct 1, 2026Шпаргалка по sealed-иерархиям в Java! На картинке показано, как sealed-класс ограничивает…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →