Java中的直接比较器开箱即用

KAR*_*ván 5 java collections comparable comparator guava

我有一个方法需要一个Comparator参数.我想传递一个Comparator其中做了正常比较和一个反向,其确实在反向比较器.

java.util.Collections提供一个reverseOrder()这对反向比较有好处,但我找不到任何正常的Comparator.

我想到的唯一解决方案是Collections.reverseOrder(Collections.reverseOrder()).但我不喜欢它因为调用里面的双重方法.

当然我可以这样写NormalComparator:

public class NormalComparator<T extends Comparable> implements Comparator<T> {
    public int compare(T o1, T o2) {
        return o1.compareTo(o2);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我真的很惊讶Java没有开箱即用的解决方案.

Joa*_*uer 6

您可以指定a的大多数地方Comparator也有一个版本而根本不使用a Comparator在这种情况下它使用自然顺序(即它期望所有对象实现Comparable和使用compareTo).

因此,通常的解决方案是根本不指定一个Comparator.你有一个地方的具体情况只有Comparator被支持的方法?

如果你绝对需要它,Google Collections(以及Guava,它是Google Collections的超集)提供了Ordering.natural()返回一个Ordering对象,对象代表Comparable界面定义的自然顺序.Ordering实现Comparator,所以你可以简单地使用它.