Estoy aprendiendo la Comparator
interfaz y estoy confundido con él es estática Comparator.comparing()
método. Acerca de Comparator.comparing()
los parámetros del método y cómo se puede utilizar referencias de métodos. Cuando miraba a la documentación dice que que tiene un "parámetro keyExtractor". ¿Puede explicar lo que me está confundiendo?
A partir de la documentación de Comparator#comparing(Function)
:
Acepta una función que extrae una
Comparable
clave de selección de un tipoT
, y devuelve unaComparator<T>
que compara por que clave de ordenación.
Es así que se puede comparar objetos basado en una propiedad de esos objetos. La misma documentación da un ejemplo:
API Nota:
Por ejemplo, para obtener una
Comparator
que comparaPerson
objetos por su apellido,Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
Cuando tu lo hagas:
Person p1 = ...;
Person p2 = ...;
int result = byLastName.compare(p1, p2);
El extractor clave dada extraerá los últimos valores de nombre de cada uno Person
con el fin de comparar esos valores en lugar de los Person
objetos "directamente". Si la clave no es Comparable
entonces usted puede utilizar la sobrecarga que le permite especificar una Comparator
para la comparación de los valores clave extraídos.
Lo anterior byLastName
de comparación sería lo mismo que:
public class ByLastNameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getLastName().compareTo(p2.getLastName());
}
}
Cuando las llamadas a p1.getLastName()
y p2.getLastName()
serían la clave extractor de Function
aplicación.