7.7 IntStream e a família de Streams

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.

原文链接:7.7 IntStream e a família de Streams

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
Wish my smile clear off the sky, of all days.
微笑可以晴朗所有的天
评论 抢沙发

请登录后发表评论

    暂无评论内容