Problema com Stream:
- O uso de map(Usuario::getPontos) gera autoboxing, tornando a operação ineficiente.
Stream<Integer> stream = usuarios.stream().map(Usuario::getPontos);Stream<Integer> stream = usuarios.stream() .map(Usuario::getPontos);Stream<Integer> stream = usuarios.stream() .map(Usuario::getPontos);
Enter fullscreen mode Exit fullscreen mode
Solução com IntStream:
- O mapToInt() evita autoboxing, melhorando o desempenho.
IntStream stream = usuarios.stream().mapToInt(Usuario::getPontos);IntStream stream = usuarios.stream() .mapToInt(Usuario::getPontos);IntStream stream = usuarios.stream() .mapToInt(Usuario::getPontos);
Enter fullscreen mode Exit fullscreen mode
Diferença técnica:
- map() usa Function.
- mapToInt() usa ToIntFunction, que retorna int diretamente (applyAsInt).
Operações úteis em IntStream:
- average(), max(), sorted().
- Exemplo de cálculo da média de pontos:
double pontuacaoMedia = usuarios.stream().mapToInt(Usuario::getPontos).average().getAsDouble();double pontuacaoMedia = usuarios.stream() .mapToInt(Usuario::getPontos) .average() .getAsDouble();double pontuacaoMedia = usuarios.stream() .mapToInt(Usuario::getPontos) .average() .getAsDouble();
Enter fullscreen mode Exit fullscreen mode
Comparação com a abordagem tradicional:
double soma = 0;for (Usuario u : usuarios) {soma += u.getPontos();}double pontuacaoMedia = soma / usuarios.size();double soma = 0; for (Usuario u : usuarios) { soma += u.getPontos(); } double pontuacaoMedia = soma / usuarios.size();double soma = 0; for (Usuario u : usuarios) { soma += u.getPontos(); } double pontuacaoMedia = soma / usuarios.size();
Enter fullscreen mode Exit fullscreen mode
A versão com IntStream evita variáveis temporárias e torna o código mais conciso.
© 版权声明
THE END
暂无评论内容