Java - como usar o comparador?
Tanto TreeSet quanto TreeMap armazenam elementos em ordem de classificação. No entanto, é o comparador que define precisamente o que significa ordem de classificação .
A interface Comparator define dois métodos: compare () e equals (). O método compare (), mostrado aqui, compara dois elementos para o pedido -
O método de comparação
int compare(Object obj1, Object obj2)
obj1 e obj2 são os objetos a serem comparados. Este método retorna zero se os objetos forem iguais. Ele retorna um valor positivo se obj1 for maior que obj2. Caso contrário, um valor negativo é retornado.
Substituindo compare (), você pode alterar a maneira como os objetos são ordenados. Por exemplo, para classificar em ordem inversa, você pode criar um comparador que inverte o resultado de uma comparação.
O Método de Igualdade
O método equals (), mostrado aqui, testa se um objeto é igual ao comparador de chamada -
boolean equals(Object obj)
obj é o objeto a ser testado quanto à igualdade. O método retorna true se obj e o objeto de chamada forem ambos objetos Comparator e usarem a mesma ordem. Caso contrário, retorna falso.
Substituir equals () é desnecessário e a maioria dos comparadores simples não o fará.
Exemplo
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {
}
Dog(String n, int a) {
name = n;
age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
public class Example {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
}
}
Isso produzirá o seguinte resultado -
Resultado
Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
Note - A classificação da classe Arrays é igual à das Coleções.