はを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));
これらはすべて同等の形式です。