Ordenar uma lista de objetos

14 respostas
R

Galera, tem alguma estrutura de lista q me permita ordenar os elementos dela depois de preenchida??

essa lista sera formada por objetos q criei aki…cada objeto tem alguns valores…

teria como ordenar de acordo com um dos campos do objeto??

valew

14 Respostas

luiz_ross
Implementa o método equals no seu objeto dizendo qual atributo que vc vai assumir como chave pra comparar seus objetos e depois implementa da lista que vc quer ordenar

sort(List list, Comparator c)
Sorts the specified list according to the order induced by the specified comparator.

Exemplo

Collections.sort( suaLista, new Comparator() { public int compare( Object a, Object b ) { return( (String)a ).compareToIgnoreCase( (String) b ); } } );

R

valew pela dica luiz…mas ainda nao caiu a ficha…

eh q preciso ordenar por um capo Timestamp…
eh soh mudar o cast?? onde especifico o campo a ser usado??

luiz_ross
Mas pelo que ?  Dia, mes , ano, ou hora, minuto e segundo?
R

ordenar pelo Timestamp inteiro…

luiz_ross
É no método equals que vc diz que atributo vai ser sua chave de comparação

public boolean equals(Object obj) { if ((obj instanceof SeuObjeto) && (((SeuObjeto) obj).getSeuAtributo().equals(this.getSeuAtributo()))) { return true; } else { return false; } }

R

calma lah luiz…

entao preciso sobre-escrever o metodo sort() criando um novo COmparator e tb o metodo equals()??

luiz_ross
hehehehe, isso mesmo :D
R

hmmmm…

cara, to olhando aki a API, mas ainda nao consegui fazer esse eskema…

vc tem algo feito nesse eskema??

valew pela forca…

caiofilipini

Na verdade, você não tem que sobrescrever o método sort() não.

Você precisa escrever uma classe que implemente a interface java.util.Comparator, e que seja capaz de comparar dois objetos… No seu caso, você utiliza esse Timestamp para comparar. Outra opção é a sua classe implementar java.lang.Comparable.

O método Collections.sort() usa ou um Comparator ou o método compareTo() da sua classe para ordenar uma Collection.

[]'s

luiz_ross
Essas outras opções também como o Caio disse :D
R

hhe…ainda nao foi dessa vez…

fiz o q o Caio disse…minha classe implementa a Comparator e criei o metodo compare

public int compare(Object o1, Object o2) {
		return ((Log)o1).getDate().compareTo(((Log)o2).getDate());
	}

ele tah devolvendo a comparacao entre os campos Timestamp q kero ordenar…falta ainda alguma coisa??

valew

luiz_ross
Deu o sort na sua lista , pra ver se ordenou ou não?
TedLoprao

Faz o seguinte:

Comparator meuComparator = new Comparator() {

  public int compare(Object o1, Object o2) {
    MeuObjeto m1 = (MeuObjeto) o1;
    MeuObjeto m2 = (MeuObjeto) o2;
    return m1.getTimestamp().compareTo(m2.getTimestamp());
  }

};

Collections.sort(suaLista, meuComparator);

Dai sua list pode ser um ArrayList normal, por exemplo.

Vc pode ainda fazer algumas validações antes de comparar, vai do que vc precisar…

Espero ter ajudado

Fallow

R

valew TedLoprao…funfou agora!!

valew pelas dicas galera…

Criado 13 de dezembro de 2004
Ultima resposta 13 de dez. de 2004
Respostas 14
Participantes 4