Streams Api

reduce

Trabalhando com reduce

O método reduce é uma poderosa operação da Streams API que permite acumular os elementos de uma stream em um único valor, de acordo com uma função especificada.

Sintaxe

A sintaxe básica do reduce é simples. Ele aceita dois argumentos: o valor inicial (ou identidade) e uma função que define a operação de redução.

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

int soma = numeros.stream()
                  .reduce(0, (total, valor) -> {
                      // Operação de redução
                  });

Exemplo

Vamos ver um exemplo prático de como usar o reduce para calcular a soma dos elementos de uma lista:

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

int soma = numeros.stream()
                  .reduce(0, (total, valor) -> {
                      System.out.println("Valor acumulado: " + total);
                      System.out.println("Valor a ser somado: " + valor);
                      return total + valor;
                  });

System.out.println("Resultado da soma: " + soma); // Resultado da soma: 15

Este código acumula a soma dos elementos da lista numeros. A saída será:

Valor acumulado: 0
Valor a ser somado: 1
Valor acumulado: 1
Valor a ser somado: 2
Valor acumulado: 3
Valor a ser somado: 3
Valor acumulado: 6
Valor a ser somado: 4
Valor acumulado: 10
Valor a ser somado: 5
Resultado da soma: 15

Dicas

  • O reduce é útil para realizar operações de agregação em uma coleção, como soma, multiplicação, concatenação, entre outros.
  • Certifique-se de fornecer um valor inicial apropriado para a operação de redução, pois ele será retornado se a stream estiver vazia.

Limitações

É importante notar que o reduce pode não ser a escolha mais eficiente para todas as operações de agregação, especialmente em streams paralelas. Para operações de soma, por exemplo, é preferível usar sum().

O reduce é uma ferramenta poderosa para realizar operações de agregação em uma coleção. Experimente diferentes operações de redução e veja como elas podem ser aplicadas em seus projetos.