Da Dateimplementiert Comparable, hat es eine compareToMethode wie Stringtut.
Ihr Brauch Comparatorkönnte also so aussehen:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
Die compare()Methode muss ein zurückgeben int, sodass Sie ein direktes Ergebnis nicht direkt zurückgeben booleankönnen.
Ihr Sortiercode würde ungefähr so sein, wie Sie geschrieben haben:
Collections.sort(Database.arrayList, new CustomComparator());
Eine etwas kürzere Möglichkeit, dies alles zu schreiben, wenn Sie Ihren Komparator nicht wiederverwenden müssen, besteht darin, ihn als anonyme Inline-Klasse zu schreiben:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Sie können das letzte Beispiel jetzt in kürzerer Form schreiben, indem Sie einen Lambda-Ausdruck für Folgendes verwendenComparator :
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Und Listhat eine sort(Comparator)Methode, so dass Sie diese noch weiter verkürzen können:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Dies ist eine so verbreitete Redewendung, dass es eine integrierte Methode gibt , um eine Comparatorfür eine Klasse mit einem ComparableSchlüssel zu generieren :
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
All dies sind äquivalente Formen.