[quote=lcegatti]É isso ai … eu estava até implementado um exemplo com Comparator, para não perder a idéia segue o exemplo, mas é tudo o que o sergio disse.
Comparador Data, fiz um exemplo rapido com o getTime(), mas não é garantido comparar com ele.
public class ComparadorData implements Comparator {
public int compare(Object obj1, Object obj2) {
int retorno = 0;
if(obj1 == null || obj2 == null)
return 0;
Objeto objeto1 = (Objeto) obj1;
Objeto objeto2 = (Objeto) obj2;
if(objeto1.getData().getTime() > objeto2.getData().getTime()) {
retorno = 1;
} else if (objeto1.getData().getTime() == objeto2.getData().getTime()) {
retorno = 0;
} else {
retorno = -1;
}
return retorno;
}
Comparador do campo ord
public class ComparadorOrd implements Comparator {
public int compare(Object obj1, Object obj2) {
int retorno = 0;
if(obj1 == null || obj2 == null)
return retorno;
Objeto objeto1 = (Objeto) obj1;
Objeto objeto2 = (Objeto) obj2;
if(objeto1.getOrd() > objeto2.getOrd()) {
retorno = 1;
} else if(objeto1.getOrd() == objeto2.getOrd()) {
retorno = 0;
} else {
retorno = -1;
}
return retorno;
}
}
Usage
ComparadorData comparadorData = new ComparadorData();
ComparadorOrd comparadorOrd = new ComparadorOrd();
List objetos<Objeto> = new ArrayList<Objeto>();
Collections.sort(objetos, comparadorData) ;
Collections.sort(objetos, comparadorOrd) ;
vlww
[]'s[/quote]
valeu cegatti e taborda, fiz umas alterações e funcionou, a idéia então para ordenar com mais de um critério é:
Uma vez implementando o Comparator, ele lhe oferece o método abstrato “compare”, este método recebe dois objetos por parâmetro, (ambos que serão comparados) que retornam um inteiro, onde: 1 significa MAIOR, -1 MENOR e 0 IGUAIS.
Uma comparação de dois critérios pode envolver apenas uma classe, sendo:
[code]public class DoisCriterios implements Comparator {
public int compare(Object obj1, Object obj2) {
int retorno = 0;
if(obj1 == null || obj2 == null)
return 0;
SortMe objeto1 = (SortMe) obj1;
SortMe objeto2 = (SortMe) obj2;
//maior
if (objeto1.getDate().after(objeto2.getDate())) {
retorno = 1;
}
//menor
else if (objeto1.getDate().before(objeto2.getDate())) {
retorno = -1;
}
//iguais ?
else {
if (objeto1.getOrd() > objeto2.getOrd()) {
retorno = 1;
} else if (objeto1.getOrd() < objeto2.getOrd()) {
retorno = -1;
}
}
return retorno;
}
}[/code]
Como pode ser visto, o X da questão está em: Verificar o primeiro critério e depois o segundo (se houverem mais, vai verificando)
Abraços