Notícias
recent

Ordenação de coleções em Java (Utilizando BeanComparator da Apache)


Para ordenar objetos de uma coleção o Java tenta “comparar” os objetos e por essa comparação é possível ordenar em ordem crescente (objetos menos primeiro).

Collections.sort(list)

Agora como falar para o Java qual o menor e qual o maior?

A implementação padrão exige que seu objeto implemente a interface Comparator e conseqüentemente tenha o método compareTo() que retorna "-1" quando o objeto é menor, "0" quando é igual e "1" quando é maior. Dependendo do número de colunas que se deseja utilizar esse método acaba ficando complexo.

Para contornar esse problema existe uma implementação da Apache que é utilizada no Struts, Trinidad, Tomcat, etc…, que facilita e muita essa ordenação.

Collections.sort(list, new BeanComparator("nomeDaPropriedade"));

Isso faz com que os objetos sejam ordenados utilizando o “nomeDaPropriedade” em ordem crescrente.
Caso precise ordenar mais de uma coluna pode utilizar o ChainComparator como o exemplo abaixo:

ComparatorChain cc = new ComparatorChain();
cc.addComparator(new BeanComparator("coluna1"));
cc.addComparator(new BeanComparator("coluna2"));
Collections.sort(list, cc);

Para ordenar de forma decrescente:

cc.addComparator(new BeanComparator("coluna1"), true);

Mais um exemplo, caso precise ordenar uma String ignorando o case, você deve transformar o valor antes de comparar (isso também pode ser utilizado em tipos diferentes de String):

Transformer transformer = new Transformer() {
   public Object transform(Object input) {
      if(input != null) {
         return ((String) input).toLowerCase();
      }
      return "";
   }
};

Comparator comparatorString = new TransformingComparator(transformer);
Collections.sort(colecoes, new BeanComparator("coluna1", comparatorString));

É isso ai, fica a dica que me foi muito útil.
Laisson R. Silveira

Laisson R. Silveira

Louco por inovações e desenvolvimento de softwares, apaixonado por música e praia. Analista Desenvolvedor Java e Consultor de Sistemas.

Formulário de contato

Nome

E-mail *

Mensagem *

Tecnologia do Blogger.