Dal momento che Date
implementa Comparable
, ha un compareTo
metodo proprio come String
fa.
Quindi la tua abitudine Comparator
potrebbe apparire così:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
Il compare()
metodo deve restituire un int
, quindi non è possibile restituire direttamente un boolean
come previsto comunque.
Il codice di ordinamento sarebbe simile a quello che hai scritto:
Collections.sort(Database.arrayList, new CustomComparator());
Un modo leggermente più breve per scrivere tutto questo, se non hai bisogno di riutilizzare il tuo comparatore, è di scriverlo come una classe anonima in linea:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Ora puoi scrivere l'ultimo esempio in una forma più breve usando un'espressione lambda per Comparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
E List
ha un sort(Comparator)
metodo, quindi puoi accorciare ulteriormente questo:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Questo è un linguaggio così comune che esiste un metodo incorporato per generare un Comparator
per una classe con una Comparable
chiave:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Tutte queste sono forme equivalenti.