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.