当前位置: 首页 > 面试题库 >

标准api中是否存在自然比较器?

纪成礼
2023-03-14
问题内容

我需要一个比较器作为策略模式的一部分,它可以使用对象的自然顺序或某些自定义顺序。对于自然排序情况,我编写了一个简单的比较器:

private static class NaturalComparator<T extends Comparable<? super T>> implements Comparator<T> {
    @Override
    public int compare(T o1, T o2) {
        return o1.compareTo(o2);
    }
}

看起来很简单,但是我想知道是否有人知道标准API中的一个。我查看了TreeMap,并且它没有这样的类即可完成工作,因此在编写该代码时,明显的答案是“否”,但也许稍后再添加。


问题答案:

在Java
8中已
添加到Comparator中:

static <T extends Comparable<? super T>> Comparator<T> naturalOrder()

像这样使用它,例如:

Comparator<Double> natural = Comparator.<Double>naturalOrder();
return natural.compare(1.0, 1.1));


 类似资料:
  • 这是对OCaml标准库所提供的不同容器的一个粗略的比较。以下的n代表容器中元素的数量。 值得注意的是,大O所代表的是当前实现下的效率,并不为官方文档保证。希望以后这些实现不会 变得更糟糕吧。总之,文档才是理解这些模块最好的来源。当然,你也可以尝试阅读源代码。 Lists: 不可变的单链表 添加一个元素会创建一个新的链表l,从x指向链表tl。tl不会被改变,因此不会被拷贝。 添加一个元素: O(1)

  • 如果我有一个PriorityQueue,它有一个Comparator,一个element类实现了Comparable类,以及它们的排序冲突,那么队列将如何处理排序?它是抛出异常还是忽略一个排序规则?

  • 问题内容: 如果值大于零,如何比较? 问题答案: 就像这样简单: 的文档实际上指定了它将返回-1、0或1,但是更通用的方法仅保证在适当的三种情况下小于零,零或大于零- 因此,我通常只是坚持这种比较。

  • 如何比较两个javascript集?我尝试使用和但都返回false。 这两个集合是等价的,因为根据定义,集合没有顺序(至少通常没有)。我看了MDN上的集合的留档,没有发现任何有用的东西。有人知道怎么做吗?

  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"

  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"