Oii Enzo, tudo bem?
O método reduce() é uma operação de redução, que combina os elementos de uma stream para produzir um único valor. Ele é muito útil em operações como soma, multiplicação ou encontrar o mínimo e máximo em uma coleção de elementos. No seu exemplo, o reduce() é usado para somar os números após eles serem dobrados pelo método map().
O reduce() funciona no seu código da seguinte forma:
.reduce(0, (total, numero) -> total + numero);
Primeiro argumento (0): Este é o valor inicial. O resultado da redução começa com esse valor. No caso da soma, começamos com 0.
Segundo argumento ((total, numero) -> total + numero): Esta é uma função lambda que define como os valores na stream devem ser combinados. A função recebe dois parâmetros: total que é o acumulador (mantém o total acumulado até o momento), e numero que é o elemento atual da stream. A cada iteração, a função soma total e numero, e o resultado é passado como total para a próxima iteração.
No seu código, cada número da lista é primeiro exibido pelo peek(), depois dobrado pelo map(), novamente exibido pelo peek() e finalmente somado pelo reduce(). O resultado final é a soma de todos os números dobrados, que é impressa no console.
Um abraço e bons estudos.