Collections.max函数,用于java </integer>中的iterable <integer>

时间:2009-01-14 17:38:00

标签: java collections max standard-library

Java Collections.max仅采用可排序对象的集合。但是由于集合不一定排序,我认为没有任何理由不为可迭代类型实现相同的max函数。

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

4 个答案:

答案 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)

1.2中引入了

Collections.maxIterable是在1.5中引入的。

很少有Iterable不是Collection。如果你这样做,那么它很容易实现(小心阅读规范)。如果您认为这非常重要,您可以在bugs.sun.com上提交RFE(如果已有,则投票)。

答案 2 :(得分:0)

嗯......不,没有。如果您想使用Collections.max(),则必须先将Iterable转换为Collection,这可能是将所有元素添加到List(或Set ,取决于数据。)

答案 3 :(得分:-1)

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

Collections类中的max() method基本上是您在那里发布的确切类型签名,因此它应该适合您的目的。