Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] reduce() vs sum()

Lendo a documentação do Java, vi que na interface Stream existe um método que não foi mencionado nas aulas, chamado reduce, que reduz um stream a um único falor. Por exemplo, dado uma lista de inteiros, podemos reduzir essa lista a um único valor de soma, média, min, max, etc.

Por que esse método existe se conseguimos obter o mesmo resultado utilizando os métodos sum, average, e assim adiante? Abaixo está o código de ambas implementações, qual a vantagem de cada uma e quando usar? Poderiam dar outros exemplos do uso do reduce?

        int sum1 = cursos.stream()
                .mapToInt(Curso::getQuantidadeAlunos)
                .sum();

        int sum2 = cursos.stream()
                .mapToInt(Curso::getQuantidadeAlunos)
                .reduce(0, Integer::sum);
1 resposta
solução!

Oi Matheus! Tudo bem?

A ideia do reduce é combinar vários elementos diferentes, até chegar em um só. E quando falamos de elementos, não falamos apenas de números, onde obtemos, como você disse, a soma, a média e várias outras coisas... Podemos usar o reduce para juntar strings, por exemplo:

        String[] array = { "Curso", "de", "Java" };

        Optional<String> String_combine = Arrays.stream(array)
                                           .reduce((str1, str2)
                                           -> str1 + "-" + str2);

Como resultado, temos: Curso-de-Java. Nos links a seguir, você pode ver mais exemplos de usos do reduce:

Espero ter ajudado! Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!