sábado, 28 de maio de 2011

Classificando com comparator

Assim como o comparable o comparator é outro modo de classificar uma coleção de uma série de modos diferentes, ao contrario da comparaple é possível classificar até mesmo classes que você não consegue modificar.

Um pequeno exemplo de como implementar o comparator classificando por nome.

public class Cliente{
   private String nome;
   private int idade;

   //Getters e Setters
}

public class NomeSort implements Comparator<Cliente>{
   public String compare(Cliente one, Cliente two){
      return one.getNome().compareTo(two.getNome());
   }
}


public class Teste {

public static void main(String[] args) {
List<Cliente> clientes = new ArrayList<Cliente>();

Cliente c1 = new Cliente();
c1.setNome("Xuxa");
clientes.add(c1);

Cliente c2 = new Cliente();
c2.setNome("Cristiano");
clientes.add(c2);

System.out.println("--- Antes de classificar ---");
for(Cliente c : clientes){
System.out.println(c.getNome());
}

NomeSort ns = new NomeSort();
Collections.sort(clientes, ns);
System.out.println("--- Depois de classificar ---");
for(Cliente c : clientes){
System.out.println(c.getNome());
}
}
}

Ambas interfaces são semelhantes, porem existe algumas diferenças entre elas.

Pacote
Comparable: java.lang.Comparable
Comparator: java.util.Comparator


Implementação
Comparable: int objOne.compareTo(objTwo)
Comparator: int compare(objOne, objTwo)

Retorna
Comparable: negativo se objOne < objTwo, zero se objOne == objTwo, positivo se objOne > objTwo
Comparator: mesmo que comparable

Implementação de classes
Comparable: Você precisa modificar qual a classe cujas instância deseja classificar.
Comparator: Você cria uma classe separada daquela cjas instancias deseja classificar.


Quantidade de seqüencias
Comparable: Só pode ser criada uma seqüencia de classificação.
Comparator: Podem ser criadas varias seqüencias de classificação.

Nenhum comentário:

Postar um comentário