可比较的比较器

时间:2014-05-14 03:55:21

标签: java

我正在尝试按常规或逆序排序集合,具体取决于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);作为常规或反向比较器,但这不是问题。

1 个答案:

答案 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 - 用于确定列表顺序的比较器。空值表示应该使用元素的自然顺序。