由于Date
实现了Comparable
,因此它和String
一样具有compareTo
方法.
因此,您的定制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());
}
});
现在,您可以用lambda expression表示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()));
这是一个常见的习惯用法,对于一个Comparable
键的类,要生成Comparator
,需要a built-in method个:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有这些都是等价的形式.