我有一个方法,它的参数之一需要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/