domingo, 17 de agosto de 2008

Ordenação por mais de um campo

domingo, 17 de agosto de 2008
Algo comum no desenvolvimento java é a necessidade de ordenar objetos, o java com a API collections dele disponibiliza formas de efetuar esta tarefa, você pode fazer isto:
  1. Implementando a interface Comparable no objeto a ser comparado.
  2. Implementando um objeto comparador

Para a 1º situação você deve conforme a interface criar um método chamado compareTo, o retorno deste método deve ser um int (primitivo) onde deve conter o valor -1 se o objeto comparado foi menor do que o objeto atual, 0 se objeto for igual e 1 se o objeto for maior.

Para a situação 2 você deve fazer uma classe que implemente a interface Comparable como na situação 1.

para realizar a ordenação você deve utilizar um método estático da API Collections o SORT, este método sobrecarregado tem 2 implementações a primeira você passa a list que contém os seus objetos e ele coloca em ordem, lembrando que para ele fazer isto você deve implementar Comparable, caso contrário ele disparará uma exception, e a outra forma é passar a lista e o objeto comparador, desta forma você pode ordenar os seus objetos.

Mais ai vem um detalhe importante com a qual esta semana me deparei, precisei colocar não um só campo do objeto em ordem, mas sim 5 campos do objeto, como fazer isto? depois de pesquisar encontrei a solução a Apache tem uma API Common Collections e BeanUtil (veja as dependências) estas bibliotecas contém funções comuns e uma delas advinhem só, faz exatamente isto, segue um código de exemplo de ordenação por mais de um campo:

List sortFields = new ArrayList();

sortFields.add(new BeanComparator("nome"));
sortFields.add(new BeanComparator("sobrenome"));

ComparatorChain multiSort = new ComparatorChain(sortFields);

java.util.Collections.sort(clientes,multiSort);

O código acima faz a ordenação das lista de objetos clientes pelos campos nome e sobrenome, facilitando assim a ordenação de objetos.

espero que gostem da dica.



2 comentários :