自Date实现Comparable以来,它就像String一样有一个compareTo方法.
所以你的自定义Comparator可能如下所示:
public class CustomComparator implements Comparator {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
compare()方法必须返回一个int,因此无法直接返回一个类似于计划的布尔值.
你的排序代码就像你写的那样:
Collections.sort(Database.arrayList, new CustomComparator());
如果你不需要重用你的比较器,写一个稍微短一点的方法是将它写成内联匿名类:
Collections.sort(Database.arrayList, new Comparator() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
您现在可以使用lambda expression为比较器以较短的形式编写最后一个示例:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
List有一个sort(Comparator)方法,所以你可以进一步缩短它:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
这是一个常见的习惯用法,即a built-in method为具有Comparable键的类生成Comparator:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有这些都是等效的形式.