Ordenacao

3 respostas
I

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

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