1 O que são operações de redução?
São operações que processam os elementos do Stream para produzir um único valor final.
Exemplos:
average(), count(), min(), max(), sum().
2 Exemplo de cálculo da média de pontos
double pontuacaoMedia = usuarios.stream()
.mapToInt(Usuario::getPontos)
.average()
.getAsDouble();
mapToInt converte os objetos para int.
average() calcula a média e retorna um OptionalDouble.
3 Encontrando o usuário com maior pontuação
Optional<Usuario> max = usuarios.stream()
.max(Comparator.comparing(Usuario::getPontos));
Usuario maximaPontuacao = max.get();
max() retorna o usuário com maior pontuação, usando um Comparator.
4 Somando os pontos de todos os usuários
int total = usuarios.stream()
.mapToInt(Usuario::getPontos)
.sum();
sum() soma todos os pontos e retorna um inteiro.
5 Entendendo a operação reduce
reduce() é uma operação de redução genérica que pode ser usada para somar, multiplicar ou realizar qualquer outra agregação.
Funcionamento:
Valor inicial: ponto de partida da operação.
Operação binária: define como combinar os valores.
int total = usuarios.stream()
.mapToInt(Usuario::getPontos)
.reduce(0, (a, b) -> a + b);
0: valor inicial.
(a, b) -> a + b: operação de soma.
6 Alternativas ao Lambda
Podemos usar Integer::sum, simplificando a escrita:
int total = usuarios.stream()
.mapToInt(Usuario::getPontos)
.reduce(0, Integer::sum);
7 Exemplo: Multiplicação dos pontos
int multiplicacao = usuarios.stream()
.mapToInt(Usuario::getPontos)
.reduce(1, (a, b) -> a * b);
Aqui, reduce(1, (a, b) -> a * b) multiplica todos os pontos dos usuários.
8 Redução sem mapToInt
int total = usuarios.stream()
.reduce(0, (atual, u) -> atual + u.getPontos(), Integer::sum);
Aqui, reduce soma os pontos diretamente, sem mapToInt.
Esse formato é útil em streams paralelos, onde o terceiro argumento (Integer::sum) combina resultados parciais.
9 Redução e fold
Em outras linguagens, reduce é chamado de fold.
No próximo capítulo, será mostrado como reduções podem ser paralelizadas usando Streams paralelos.
collect() também é uma forma de redução.
Exemplo: Reducao.java
Top comments (0)