6

Java Collections.max 只接受一个可排序对象的集合。然而,由于集合不一定是排序的,我看不出有任何理由不为可迭代类型实现相同的 max 函数。

Iterable<T extends Comparable<? super T>>java的标准库中有max方法吗?

4

4 回答 4

15

虽然 Guava 不是 Java 的标准库,但它已经足够接近了......

E com.google.common.collect.Ordering#max(Iterable<E> iterable)

例如T max = Ordering.natural().max(myIterable);

至于标准库为什么不实现它,可能是因为Collection 必须是有限的,但Iterable 不一定是——而且可以说,如果非终止的 Iterable 会导致您的代码循环,则永远不应该接受 Iterable永远。

于 2011-04-06T15:04:04.890 回答
5

Collections.max在 1.2 中引入。Iterable在 1.5 中引入。

很少有一个Iterable不是Collection. 如果你这样做了,那么它很容易实现(请仔细阅读规范)。如果您认为这真的很重要,您可以在 bugs.sun.com 上提交一份 RFE(或者如果那里已经有,请投票)。

于 2009-01-14T18:46:43.900 回答
0

嗯……不,没有。如果您想使用Collections.max()您必须首先将您的Iterable转换为Collection,可能通过将所有元素添加到List(或Set,具体取决于数据)中。

于 2009-01-14T17:46:57.060 回答
-1

根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现Comparable),因为为了计算最大值,必须能够确定一个元素是否大于另一个元素(这正是 Comparable 的含义)。

Collections 类中的max() 方法基本上具有您在此处发布的确切类型签名,因此它应该适合您的目的。

于 2009-01-14T17:50:26.367 回答