我正在尝试根据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);
创建一个比较器,该比较器可以用作常规或反向比较器,但这不是问题。 最佳答案
如果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-比较器,用于确定列表的顺序。空值表示应使用元素的自然顺序。