Eu tenho que fazer uma ordenação por atributo.
Tenho uma lista de objetos e preciso fazer em uma hora a ordenação por uma atributo e em outra por outro atributo.
Por ex uma lista ArrayList de obj Pessoa … onde pessoa tem nome e numero.
Um,a hora vo ordenar por nome e em outro por numero.
Já procurei e no API tem la Collections.sort (lista l Comparetor c) mas eu n entendi como fazer esse tal de “Comparetor” …
Tem q fazer uma classe so pra isso!???
Tem algum exemplo!???
Como no caso são duas ordenações por atributos diferentes daí então tenho q fazer 2 classes!???
Eu coloco isso na própria classe Pessoa ou na classe onde esta a lista de Pessoas !???
os atributos sao do tipo double
Ordenacao
I
3 Respostas
J
Veja um exemplo:
public class Comparador implements Comparator<Pessoa>{
private String atributo;
public Comparador(String atributo){
this.atributo = atributo;
}
public String getAtributo() {
return atributo;
}
public void setAtributo(String atributo) {
this.atributo = atributo;
}
public int compare(Pessoa pes1, Pessoa pes2){
int ret = 0;
if(getAtributo().equals("numero")){
ret = Integer.valueOf(pes1.getNumero()).compareTo(Integer.valueOf(pes2.getNumero()));
}
if(getAtributo().equals("nome")){
ret = pes1.getNome().compareTo(pes2.getNome());
}
return ret;
}
}
List lista = new ArrayList();
//preenche com objetos Pessoa
Collections.sort(lista, new Comparador("nome"));
se quiser algo mais simples pode usar uma classe anonima.
I
alguem tem um exemplo utilizando uma classe anonima?
M
ta aí:
Emp[] arrEmp = new Emp[4];
Arrays.sort(arrEmp, new Comparator() {
public int compare(Object obj1, Object obj2) {
if (obj1 instanceof Emp && obj2 instanceof Emp) {
Emp it1 = (Emp) obj1;
Emp it2 = (Emp) obj2;
if (it1.getEmpno() > it2.getEmpno()) {
return 1;
} else if (it1.getEmpno() < it2.getEmpno()) {
return -1;
}
}
return 0;
}
});
Criado 16 de agosto de 2006
Ultima resposta 27 de mar. de 2007
Respostas 3
Participantes 3