自从Date
实现以来Comparable
,它就有一个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());
}
});
现在,您可以通过使用写在一个较短的形式最后一个例子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()));
这是一个非常常见的习惯用法,因此有一个内置方法可以Comparator
为带有Comparable
键的类生成一个:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
所有这些都是等效形式。