Java - ¿Cómo utilizar Comparator?
Tanto TreeSet como TreeMap almacenan elementos en orden. Sin embargo, es el comparador el que define con precisión qué significa el orden ordenado .
La interfaz Comparator define dos métodos: compare () y equals (). El método compare (), que se muestra aquí, compara dos elementos por orden:
El método de comparación
int compare(Object obj1, Object obj2)
obj1 y obj2 son los objetos a comparar. Este método devuelve cero si los objetos son iguales. Devuelve un valor positivo si obj1 es mayor que obj2. De lo contrario, se devuelve un valor negativo.
Al anular compare (), puede alterar la forma en que se ordenan los objetos. Por ejemplo, para ordenar en orden inverso, puede crear un comparador que invierta el resultado de una comparación.
El método de iguales
El método equals (), que se muestra aquí, prueba si un objeto es igual al comparador que lo invoca:
boolean equals(Object obj)
obj es el objeto que se debe probar para determinar la igualdad. El método devuelve verdadero si obj y el objeto que invoca son ambos objetos Comparator y usan el mismo orden. De lo contrario, devuelve falso.
Reemplazar equals () es innecesario y la mayoría de los comparadores simples no lo harán.
Ejemplo
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() + ", ");
}
}
Esto producirá el siguiente resultado:
Salida
Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
Note - La clasificación de la clase Arrays es la misma que la de las colecciones.