Interfaz del comparador Java se utiliza para ordenar los objetos de una clase definida por el usuario.
Esta interfaz se encuentra en el paquete java.util y contiene 2 métodos comparar (Objeto obj1, Objeto obj2) y igual (elemento Objeto).
Proporciona múltiples secuencias de clasificación, es decir, puede ordenar los elementos según cualquier miembro de datos, por ejemplo, número de lista, nombre, edad o cualquier otra cosa.
Métodos de la interfaz del comparador Java
| Método | Descripción |
|---|---|
| comparación int pública (Objeto obj1, Objeto obj2) | Compara el primer objeto con el segundo objeto. |
| público booleano es igual (Objeto obj) | Se utiliza para comparar el objeto actual con el objeto especificado. |
| público booleano es igual (Objeto obj) | Se utiliza para comparar el objeto actual con el objeto especificado. |
| Método | Descripción |
|---|---|
| int comparar(T o1, T o2) | Compara el primer objeto con el segundo objeto. |
| estático | Acepta una función que extrae una clave de clasificación Comparable de un tipo T y devuelve un Comparador que compara según esa clave de clasificación. |
| Comparador estático comparando (Extractor de teclas de función, Comparador de teclas de comparación) | Acepta una función que extrae una clave de clasificación de un tipo T y devuelve un Comparador que compara mediante esa clave de clasificación utilizando el Comparador especificado. |
| Comparador estático comparandoDoble(ToDoubleFunction keyExtractor) | Acepta una función que extrae una clave de clasificación doble de un tipo T y devuelve un Comparador que compara según esa clave de clasificación. |
| Comparador estático comparandoInt(ToIntFunction keyExtractor) | Acepta una función que extrae una clave de clasificación int de un tipo T y devuelve un Comparador que compara según esa clave de clasificación. |
| Comparador estático comparandoLong(ToLongFunction keyExtractor) | Acepta una función que extrae una clave de clasificación larga de un tipo T y devuelve un Comparador que compara según esa clave de clasificación. |
| booleano es igual (Objeto obj) | Se utiliza para comparar el objeto actual con el objeto especificado. |
| estático | Devuelve un comparador que compara objetos comparables en orden natural. |
| Comparador estático nullsFirst(Comparador comparador) | Devuelve un comparador que trata los elementos nulos como menores que los elementos no nulos. |
| Comparador estático nullsLast(Comparador comparador) | Devuelve un comparador que trata a los elementos nulos como mayores que los elementos no nulos. |
| Comparador predeterminado invertido() | Devuelve un comparador que contiene el orden inverso del comparador proporcionado. |
| estático | Devuelve un comparador que contiene el orden inverso al natural. |
| Comparador predeterminado y luego Comparar (Comparador otro) | Devuelve un comparador de orden lexicográfico con otro comparador. |
| por defectoComparador y luego Comparar(Tecla de funciónExtractor) | Devuelve un comparador de orden lexicográfico con una función que extrae una clave de clasificación comparable. |
| Comparador predeterminado y luego Comparar (Extractor de teclas de función, Comparador de teclas de comparación) | Devuelve un comparador de orden lexicográfico con una función que extrae una clave para compararla con el Comparador dado. |
| Comparador predeterminado y luego ComparandoDoble(ToDoubleFunction keyExtractor) | Devuelve un comparador de orden lexicográfico con una función que extrae una clave de clasificación doble. |
| Comparador predeterminado y luego CompararInt(ToIntFunction keyExtractor) | Devuelve un comparador de orden lexicográfico con una función que extrae una clave de clasificación int. |
| Comparador predeterminado y luego ComparandoLong(ToLongFunction keyExtractor) | Devuelve un comparador de orden lexicográfico con una función que extrae una clave de clasificación larga. |
Ejemplo de comparador de Java 8
Veamos el ejemplo de ordenar los elementos de Lista según la edad y el nombre.
Archivo: Estudiante.java
class Student { int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } Archivo: TestSort1.java
import java.util.*; public class TestSort1{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); //Sorting elements on the basis of name Comparator cm1=Comparator.comparing(Student::getName); Collections.sort(al,cm1); System.out.println('Sorting by Name'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } //Sorting elements on the basis of age Comparator cm2=Comparator.comparing(Student::getAge); Collections.sort(al,cm2); System.out.println('Sorting by Age'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } Sorting by Name 106 Ajay 27 105 Jai 21 101 Vijay 23 Sorting by Age 105 Jai 21 101 Vijay 23 106 Ajay 27
Ejemplo de comparador de Java 8: método nullsFirst() y nullsLast()
Aquí, ordenamos la lista de elementos que también contiene nulo.
Archivo: Estudiante.java
class Student { int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int getRollno() { return rollno; } public void setRollno(int rollno) { this.rollno = rollno; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } Archivo: TestSort2.java
import java.util.*; public class TestSort2{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,null,21)); Comparator cm1=Comparator.comparing(Student::getName,Comparator.nullsFirst(String::compareTo)); Collections.sort(al,cm1); System.out.println('Considers null to be less than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } Comparator cm2=Comparator.comparing(Student::getName,Comparator.nullsLast(String::compareTo)); Collections.sort(al,cm2); System.out.println('Considers null to be greater than non-null'); for(Student st: al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } Considers null to be less than non-null 105 null 21 106 Ajay 27 101 Vijay 23 Considers null to be greater than non-null 106 Ajay 27 101 Vijay 23 105 null 21