因为Date实现了Comparable,所以它有一个compareTo方法,就像String一样。
所以你的自定义比较器可以是这样的:
public class CustomComparator implements Comparator<MyObject> {
@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<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
因为java 8
现在你可以用比较器的lambda表达式来写最后一个例子:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
List有一个sort(Comparator)方法,所以你可以进一步缩短:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
这是一个非常常见的习惯用法,因此有一个内置方法可以为具有Comparable键的类生成Comparator:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有这些都是等价的形式。