quarta-feira, 23 de julho de 2008

Ordenando Array de objetos com Comparable no Java

Ontem precisei fazer uma ordenação rápida de uma coleção de objetos no Java. Gostaria agora de compartilhar a facilidade de se fazer esta ordenação no Java.

Em primeiro lugar precisamos escolher qual o critério de ordenação da classe que estará na coleção. No meu exemplo utilizarei esta classe:
Nesta classe temos duas possibilidades. Ordenar pelo atributo idMinhaClasseDto ou valorClasse. Vamos ordenar por valor Classe.
A ordenação exige que esta classe implemente a interface Comparable. Ao implementar, a compilação irá exigir a implementação do método public int compareTo(Object o) .
Este método será responsável pela ordenação. Ao chamar o método sort da sua coleção, será utilizado este método para a ordenação.
Como ele fará isto?
Se o valor retornado for -1 indicará que o objeto ao ser comparado é menor. Se for 0 é igual, e se for 1 é maior, desta forma, o método sort saberá se o objeto que está comparando ficará antes ou depois na coleção.
Como na classe que sugeri queremos ordenar pelo atributo objeto BigDecimal, implementei a classe da seguinte forma:

public int compareTo(Object o) {
return this.getValorClasse().compareTo(((MinhaClasseDto)o).getValorClasse());
}

Vejam que comparei o valor utilizando os métodos da classe. Sendo criativo, podemos fazer que esta ordenação obedeça diversos parâmetros.

Depois disto basta chamar o método sort de sua coleção, como :

MinhaClasseDto[] objeto = {new MinhaClasseDto(),new MinhaClasseDto(),
new MinhaClasseDto(),new MinhaClasseDto()};

objeto[0].setValorClasse(new BigDecimal(0));
objeto[1].setValorClasse(new BigDecimal(45));
objeto[2].setValorClasse(new BigDecimal(2));
objeto[3].setValorClasse(new BigDecimal(-3));
Arrays.sort(objeto);
for(int i=0;i‹bids.length;i++){
System.out.println(bids[i].getIdBid() + " + " + bids[i].getVlBid());
}

Até a proxima. ;-)

Nenhum comentário: