5.5 Ordenando por pontos e o autoboxing

1 Ordenação por Pontos em Vez de Nome Para ordenar usuários pela quantidade de pontos, basta alterar o lambda passado: usuarios.sort(Comparator.comparing(u -> u.getPontos())); Esse código pode ser quebrado para melhor compreensão: Function extraiPontos = u -> u.getPontos(); Comparator comparator = Comparator.comparing(extraiPontos); usuarios.sort(comparator); 2 Problema de Autoboxing O método getPontos() retorna um int, mas Function trabalha com Integer. Isso causa autoboxing, convertendo int para Integer repetidamente, o que pode impactar a performance. Esse problema ocorre frequentemente nas novas APIs do Java 8. 3 Solução: Usar ToIntFunction e comparingInt Para evitar autoboxing, usa-se ToIntFunction, que trabalha diretamente com int: ToIntFunction extraiPontos = u -> u.getPontos(); Comparator comparator = Comparator.comparingInt(extraiPontos); usuarios.sort(comparator); A versão mais enxuta do código: usuarios.sort(Comparator.comparingInt(u -> u.getPontos())); Essa abordagem melhora a eficiência da ordenação ao eliminar conversões desnecessárias. Arquivo: OrdenacaoPontos.java

Mar 11, 2025 - 01:42
 0
5.5 Ordenando por pontos e o autoboxing

1 Ordenação por Pontos em Vez de Nome

  • Para ordenar usuários pela quantidade de pontos, basta alterar o lambda passado:

usuarios.sort(Comparator.comparing(u -> u.getPontos()));

  • Esse código pode ser quebrado para melhor compreensão:

Function extraiPontos = u -> u.getPontos();
Comparator comparator = Comparator.comparing(extraiPontos);
usuarios.sort(comparator);

2 Problema de Autoboxing

  • O método getPontos() retorna um int, mas Function trabalha com Integer.

  • Isso causa autoboxing, convertendo int para Integer repetidamente, o que pode impactar a performance.

  • Esse problema ocorre frequentemente nas novas APIs do Java 8.

3 Solução: Usar ToIntFunction e comparingInt

  • Para evitar autoboxing, usa-se ToIntFunction, que trabalha diretamente com int:

ToIntFunction extraiPontos = u -> u.getPontos();
Comparator comparator = Comparator.comparingInt(extraiPontos);
usuarios.sort(comparator);

  • A versão mais enxuta do código:

usuarios.sort(Comparator.comparingInt(u -> u.getPontos()));

  • Essa abordagem melhora a eficiência da ordenação ao eliminar conversões desnecessárias.

Arquivo: OrdenacaoPontos.java