Java Collections.max仅采用可排序对象的集合。但是由于集合不一定排序,我认为没有任何理由不为可迭代类型实现相同的max函数。
java的标准库中有Iterable<T extends Comparable<? super T>>
的最大方法吗?
答案 0 :(得分:14)
虽然Guava不是Java的标准库,但它足够接近......
E com.google.common.collect.Ordering#max(Iterable<E> iterable)
e.g。 T max = Ordering.natural().max(myIterable);
至于为什么标准库没有实现它,可能是因为a Collection must be finite,但是an Iterable need not be - 而且,可以说,如果一个人永远不会接受Iterable非终止Iterable将导致您的代码永远循环。
答案 1 :(得分:5)
Collections.max
。 Iterable
是在1.5中引入的。
很少有Iterable
不是Collection
。如果你这样做,那么它很容易实现(小心阅读规范)。如果您认为这非常重要,您可以在bugs.sun.com上提交RFE(如果已有,则投票)。
答案 2 :(得分:0)
答案 3 :(得分:-1)
根据定义,集合的元素必须是“可排序的”(具体而言,它们必须实现Comparable
),因为为了计算最大值,必须能够确定一个元素是否大于另一个元素(这正是可比较的意思)。
Collections类中的max() method基本上是您在那里发布的确切类型签名,因此它应该适合您的目的。