Executando verificação de segurança...
7

Como Ordenar Uma Lista De Objetos Por Qualquer Atributo Com JAVA

1

Hoje passei por um problema aparentemente simples no trabalho, mas que me gastou um tempinho de pesquisa. Por não ser a primeira vez que me deparo com esse cenário, resolvi escrever esse artigo com a finalidade de registrar a solução encontrada. O problema é simples e a solução foi também, mas tenho certeza que vou me deparar com essa situação novamente e voltarei aqui para relembrar como resolvi tal problema. Aproveito a oportunidade também para compartilhar a solução com todos.

A situação foi a seguinte: Eu tinha uma lista e precisava ordenar ela de diversas maneiras, contudo não era uma lista de tipos primitivos, por exemplo um int, era uma lista de objetos que por sua vez possuíam alguns atributos.

Se fosse uma lista de tipos primitivos a solução seria mais intuitiva, bastaria procurar algum método sort de alguma classe padrão do Java e pronto, estava resolvido! Mas o problema é que eu tinha uma lista de objetos. Usar simplesmente um método sort não seria suficiente, eu iriar fazer um sort utilizando qual critério? Procurando pelo google, rapidamente encontrei a estratégia de fazer a tal classe referente aos objetos da lista implementar a interface Comparable, na sequência implementar o método compareTo para um determinado atributo dessa classe e por fim usar o método estático sort da classe Collections (Collections.sort(minhaLista)) do Java. Assim tudo estaria resolvido! Mas o problema é que hora eu queria essa lista ordenada por um determinado atributo, hora por outro, entretanto, se eu usasse o compareTo, eu só teria a opção de tornar esse objeto “ordenável” em uma lista tomando como princípio de ordenação um único atributo da classe.

A solução foi algo simples mas quero deixar registrada aqui: Utilizei o método sort da própria classe List passando um objeto do tipo Comparator que por sua vez foi obtido através do método estático comparing desta mesma classe, sendo passado apenas a referência getter do atributo da minha classe a ser considerado para a ordenação.

A descrição textual dessa solução parece um tanto quanto complexa, mas acreditem, foi bem simples. Vamos a um exemplo.

Vejam a classe Aluno:

2

Agora temos uma List com diversos alunos:

3

Fazendo um System.out.println(listaAlunos) temos o seguinte resultado:

4

Caso queria ordenar essa lista de alunos pelas notas, basta fazer:

5

E o resultado desta ordenação:

6

Agora por idade:

7
8

E por fim, ordenando pelo nome (ordem alfabética):

9
10

Essa foi uma solução simples para um problema simples, mas dependendo do momento, pode nos tomar algum tempo até achar a solução.

Espero que tenham gostado dessa receita de como ordenar uma lista de objetos em Java e se quiserem, meu linkedin, até o próximo artigo.