Dal momento che Dateimplementa Comparable, ha un compareTometodo proprio come Stringfa.
Quindi la tua abitudine Comparatorpotrebbe 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 booleancome 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 Listha 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 Comparatorper una classe con una Comparablechiave:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Tutte queste sono forme equivalenti.