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);