我正在尝试按常规或逆序排序集合,具体取决于order
变量的值:
class LogEvent implements Comparable<LogEvent>{...}
void process(List<LogEvent> events, final boolean order){
Comparator<LogEvent> regularComparator = new Comparator<LogEvent>() {
@Override
public int compare(LogEvent o1, LogEvent o2) {
return o1.compareTo(o2);
}
};
Collections.sort(events, (order) ? regularComparator : Collections.reverseOrder());
}
然而,我需要引入匿名类的事实杀死了三元运算符之美。
有没有一种标准方法可以在不引入匿名类的情况下获取regularComparator
?
注意:我可以创建一个比较器,它使用return order ? o1.compareTo(o2) : o2.compareTo(o1);
作为常规或反向比较器,但这不是问题。
答案 0 :(得分:3)
如果LogEvent
如您所说实现Comparable<LogEvent>
那么您根本不需要编写比较器:
if (order) {
Collections.sort(events);
} else {
Collections.sort(events, Collections.reverseOrder());
}
编辑:可与三元运营商合作的解决方案:
Collections.sort(events, order ? null : Collections.reverseOrder());
这利用了Collections.sort(List list, Comparator c)
:
c - 用于确定列表顺序的比较器。空值表示应该使用元素的自然顺序。