JAVA 8及以上答案(使用Lambda表达式)
在Java 8中,引入了Lambda表达式以使其变得更加容易!与其创建一个具有全部脚手架的Comparator()对象,不如将其简化如下:(以您的对象为例)
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted);
甚至更短:
Collections.sort(list, Comparator.comparingInt(ActiveAlarm ::getterMethod));
一条语句等效于以下内容:
Collections.sort(list, new Comparator<ActiveAlarm>() {
@Override
public int compare(ActiveAlarm a1, ActiveAlarm a2) {
return a1.timeStarted - a2.timeStarted;
}
});
将Lambda表达式视为仅要求您放入代码的相关部分:方法签名和返回的内容。
您问题的另一部分是如何与多个字段进行比较。为此,您可以使用Lambda表达式将该.thenComparing()
函数有效地将两个比较合并为一个:
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted
.thenComparing ((ActiveAlarm a1, ActiveAlarm a2) -> a1.timeEnded-a2.timeEnded)
);
上面的代码将首先按排序列表timeStarted
,然后按排序timeEnded
(对于具有相同记录的记录timeStarted
)。
最后一点:比较“ long”或“ int”原语很容易,您可以从另一个中减去一个。如果要比较对象(“长”或“字符串”),建议您使用它们的内置比较。例:
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.name.compareTo(a2.name) );
编辑:感谢卢卡斯·埃德为我指出的.thenComparing()
职能。