我正在尝试根据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-比较器,用于确定列表的顺序。空值表示应使用元素的自然顺序。

09-10 13:59