Desde Date
implementos Comparable
, tiene un compareTo
método al igual que lo String
hace.
Entonces su costumbre Comparator
podría verse así:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
El compare()
método debe devolver un int
, por lo que no podría devolver directamente un boolean
como estaba planeando.
Su código de clasificación sería casi como lo escribió:
Collections.sort(Database.arrayList, new CustomComparator());
Una forma un poco más corta de escribir todo esto, si no necesita reutilizar su comparador, es escribirlo como una clase anónima en línea:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Ahora puede escribir el último ejemplo en una forma más corta utilizando una expresión lambda para Comparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Y List
tiene un sort(Comparator)
método, por lo que puede acortar esto aún más:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Este es un idioma tan común que hay un método incorporado para generar un Comparator
para una clase con una Comparable
clave:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Todos estos son formas equivalentes.