Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较法_Java - Fatal编程技术网

Java 比较法

Java 比较法,java,Java,我正试图根据order变量的值按常规或反向顺序对集合进行排序: class LogEvent implements Comparable<LogEvent>{...} void process(List<LogEvent> events, final boolean order){ Comparator<LogEvent> regularComparator = new Comparator<LogEvent>() {

我正试图根据
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());
}
类LogEvent实现可比较的{…}
作废流程(列出事件,最终布尔顺序){
比较器调节器比较器=新比较器(){
@凌驾
公共整数比较(LogEvent o1、LogEvent o2){
返回o1。与(o2)相比;
}
};
Collections.sort(事件,(顺序)?regularComparator:Collections.reverseOrder();
}
然而,我需要引入匿名类的事实扼杀了三元运算符的美丽

有没有一种标准方法可以在不引入匿名类的情况下获取
regularComparator


注意:我可以使用
返回顺序创建一个比较器,作为常规或反向比较器工作?o1.比较(o2):o2.比较(o1),但这不是问题所在

如果
LogEvent
如您所说实现了
Comparable
,那么您根本不需要编写比较器:

if (order) {
    Collections.sort(events);
} else {
    Collections.sort(events, Collections.reverseOrder());
}
编辑:使用三元运算符的解决方案:

Collections.sort(events, order ? null : Collections.reverseOrder());
这利用了
Collections.sort(列表,比较器c)
的这一文档化功能:

c-用于确定列表顺序的比较器。空值表示应使用元素的自然顺序


如果
LogEvent
如您所说实现了
Comparable
,那么您根本不需要编写比较器:

if (order) {
    Collections.sort(events);
} else {
    Collections.sort(events, Collections.reverseOrder());
}
编辑:使用三元运算符的解决方案:

Collections.sort(events, order ? null : Collections.reverseOrder());
这利用了
Collections.sort(列表,比较器c)
的这一文档化功能:

c-用于确定列表顺序的比较器。空值表示应使用元素的自然顺序


如果
LogEvent
如您所说实现了
Comparable
,那么您根本不需要编写比较器:

if (order) {
    Collections.sort(events);
} else {
    Collections.sort(events, Collections.reverseOrder());
}
编辑:使用三元运算符的解决方案:

Collections.sort(events, order ? null : Collections.reverseOrder());
这利用了
Collections.sort(列表,比较器c)
的这一文档化功能:

c-用于确定列表顺序的比较器。空值表示应使用元素的自然顺序


如果
LogEvent
如您所说实现了
Comparable
,那么您根本不需要编写比较器:

if (order) {
    Collections.sort(events);
} else {
    Collections.sort(events, Collections.reverseOrder());
}
编辑:使用三元运算符的解决方案:

Collections.sort(events, order ? null : Collections.reverseOrder());
这利用了
Collections.sort(列表,比较器c)
的这一文档化功能:

c-用于确定列表顺序的比较器。空值表示应使用元素的自然顺序



你知道,你可以把它移到自己的类中。匿名类总是可以被实际的类声明所代替。我只是解释问题的来源,我建议用一种标准的方法来完成您的问题。
公共类RegularComparator实现Comparator…
也许您可以代替内部类执行常规集合。排序(事件)如果顺序为正常,则else Collections.sort(事件,Collections.reverseOrder())。它并不理想,但仍然比内部类更干净。你知道,你可以将它移动到自己的类中。匿名类总是可以被实际的类声明所代替。我只是解释问题的来源,我建议用一种标准的方法来完成您的问题。
公共类RegularComparator实现Comparator…
也许您可以代替内部类执行常规集合。排序(事件)如果顺序为正常,则else Collections.sort(事件,Collections.reverseOrder())。它并不理想,但仍然比内部类更干净。你知道,你可以将它移动到自己的类中。匿名类总是可以被实际的类声明所代替。我只是解释问题的来源,我建议用一种标准的方法来完成您的问题。
公共类RegularComparator实现Comparator…
也许您可以代替内部类执行常规集合。排序(事件)如果顺序为正常,则else Collections.sort(事件,Collections.reverseOrder())。它并不理想,但仍然比内部类更干净。你知道,你可以将它移动到自己的类中。匿名类总是可以被实际的类声明所代替。我只是解释问题的来源,我建议用一种标准的方法来完成您的问题。
公共类RegularComparator实现Comparator…
也许您可以代替内部类执行常规集合。排序(事件)如果顺序为正常,则else Collections.sort(事件,Collections.reverseOrder())。它并不理想,但仍然比内部类更干净。使用Collections提供的comparator.reverseOrder()要求被排序的对象无论如何都是可比较的。
Collections.sort()的文档说明:“列表中的所有元素都必须实现可比较的接口。”
Collections.reverseOrder()
的文档也有类似的限制:“一个比较器,它对实现可比较接口的对象集合施加与自然顺序相反的顺序。(自然顺序是对象自身的compareTo方法施加的顺序)。”Collections.reverseOrder()提供的比较器的使用要求被排序的对象无论如何都是可比较的。
Collections.sort()的文档说明:“列表中的所有元素都必须实现可比较的接口。
Collections.reverseOrder()的文档说明
做出了类似的限制:“一个比较器,它对实现可比接口的对象集合施加与自然顺序相反的顺序。(自然顺序是对象自身的compareTo方法施加的顺序)。”