2
respostas

Dúvida sobre a função reduce()

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5);

int soma = numeros.stream()
                .peek(n -> System.out.println("Elemento: " + n))
                .map(n -> n * 2)
                .peek(n -> System.out.println("Conteúdo depois do map: " + n))
                .reduce(0, (total, numero) -> total + numero);

System.out.println("A soma dos números é: " + soma);

Entendi o intuito todo do código acima, agora ficou em aberto sobre como funciona o .reduce() e como ele está influenciando no código acima na hora de somar.

2 respostas

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.

Ainda ficou confuso para mim.