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