Java Collections.max 只接受一个可排序对象的集合。然而,由于集合不一定是排序的,我看不出有任何理由不为可迭代类型实现相同的 max 函数。
Iterable<T extends Comparable<? super T>>
java的标准库中有max方法吗?
Java Collections.max 只接受一个可排序对象的集合。然而,由于集合不一定是排序的,我看不出有任何理由不为可迭代类型实现相同的 max 函数。
Iterable<T extends Comparable<? super T>>
java的标准库中有max方法吗?
虽然 Guava 不是 Java 的标准库,但它已经足够接近了......
E com.google.common.collect.Ordering#max(Iterable<E> iterable)
例如T max = Ordering.natural().max(myIterable);
至于标准库为什么不实现它,可能是因为Collection 必须是有限的,但Iterable 不一定是——而且可以说,如果非终止的 Iterable 会导致您的代码循环,则永远不应该接受 Iterable永远。
Collections.max
在 1.2 中引入。Iterable
在 1.5 中引入。
很少有一个Iterable
不是Collection
. 如果你这样做了,那么它很容易实现(请仔细阅读规范)。如果您认为这真的很重要,您可以在 bugs.sun.com 上提交一份 RFE(或者如果那里已经有,请投票)。
嗯……不,没有。如果您想使用Collections.max()您必须首先将您的Iterable转换为Collection,可能通过将所有元素添加到List(或Set,具体取决于数据)中。
根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现Comparable
),因为为了计算最大值,必须能够确定一个元素是否大于另一个元素(这正是 Comparable 的含义)。
Collections 类中的max() 方法基本上具有您在此处发布的确切类型签名,因此它应该适合您的目的。