我有一个方法,它的参数之一需要Comparator。我想传递一个执行正常比较的Comparator和一个反向执行的反向比较器。
java.util.Collections提供了reverseOrder(),这对反向比较很有用,但是我找不到任何正常的Comparator

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

当然,我可以这样写一个NormalComparator:

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

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

最佳答案

您可以指定Comparator的大多数地方都有一个版本,根本不使用Comparator,在这种情况下,它使用自然顺序(即,它希望所有对象都实现Comparable并使用compareTo)。

因此,通常的解决方案是根本不指定Comparator。您是否有仅支持Comparator方法的特定情况?

如果您绝对需要它,则Google Collections(以及Google Collections的超集Guava)提供 Ordering.natural() ,该返回的a Ordering object代表Comparable接口(interface)定义的自然顺序。 Ordering实现Comparator,因此您可以简单地使用它。

关于java - 开箱即用的Java直接比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2956612/

10-11 17:12