1 O que é peek?
O método peek permite visualizar a execução do pipeline, executando uma ação a cada elemento processado.

Ele não força a execução do Stream, pois é uma operação intermediária.

2 Exemplo de uso do peek

usuarios.stream()
.filter(u -> u.getPontos() > 100)
.peek(System.out::println)
.findAny();

O peek imprime apenas até encontrar um usuário com mais de 100 pontos, demonstrando o efeito do lazy evaluation.

3 peek vs forEach
forEach é uma operação terminal e força a execução do Stream.

peek é intermediário, então o código abaixo não imprime nada, pois não há operação terminal:

usuarios.stream()
.filter(u -> u.getPontos() > 100)
.peek(System.out::println); // Nenhuma saída

4 peek com sorted e operações stateful
Se usado com sorted, o peek imprime todos os usuários antes de findAny:

usuarios.stream()
.sorted(Comparator.comparing(Usuario::getNome))
.peek(System.out::println)
.findAny();

Isso acontece porque sorted é uma operação intermediária stateful, que pode precisar processar toda a lista antes de produzir um resultado.

Exemplo: ExemploPeek.java