Da Date
implementiert Comparable
, hat es eine compareTo
Methode wie String
tut.
Ihr Brauch Comparator
kö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 boolean
kö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 List
hat 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 Comparator
für eine Klasse mit einem Comparable
Schlüssel zu generieren :
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
All dies sind äquivalente Formen.