由于 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 表达式 为 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
:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate))
所有这些都是等效形式。