はをDate
実装Comparable
しているため、doesとcompareTo
同じようなメソッドを持ってString
います。
したがって、カスタムComparator
は次のようになります。
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
compare()
この方法は、返す必要がありint
、あなたが直接返すことができなかったので、boolean
とにかくに計画していたように。
あなたのソートコードはあなたが書いたものとほぼ同じです:
Collections.sort(Database.arrayList, new CustomComparator());
コンパレータを再利用する必要がない場合、これを少し短く書く方法は、インラインの匿名クラスとして書くことです。
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
最後にラムダ式を使用して、最後の例を短い形式で記述できますComparator
。
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
そして、List
持っているsort(Comparator)
あなたも、これをさらに短縮することができますので、この方法を:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
これは非常に一般的なイディオムであり、キーを持つクラスのを生成する組み込みメソッドComparator
がありComparable
ます。
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
これらはすべて同等の形式です。