DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

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<Usuario, Integer> extraiPontos = u -> u.getPontos();
Comparator<Usuario> 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<Usuario> extraiPontos = u -> u.getPontos();
Comparator<Usuario> 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

Top comments (0)