java中可迭代的Collections.max函数<Integer>

问题描述 投票:0回答:4
Java Collections.max 仅采用可排序对象的集合。然而,由于集合不一定是排序的,所以我认为没有任何理由不为可迭代类型实现相同的 max 函数。

java的标准库中有

Iterable<T extends Comparable<? super T>>

的max方法吗?

java collections max standard-library
4个回答
16
投票
虽然 Guava 不是 Java 的标准库,但它已经足够接近了......

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



例如

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



至于标准库不实现它的原因,可能是因为

集合必须是有限的,但可迭代对象不一定是有限的——并且可以说,如果一个非终止的可迭代对象应该永远不接受可迭代对象。 Iterable 会导致你的代码永远循环。


5
投票

Collections.max

在1.2中引入。 
Iterable
在1.5中引入。

很少有

Iterable

 不是 
Collection
。如果您这样做,那么实施起来很简单(请仔细阅读规范)。如果您认为这确实很重要,您可以在 
Java Bug Database 中提交 RFE(或者投票,如果那里已经有)。


0
投票
嗯……不,没有。如果你想使用

Collections.max(),你必须首先将 Iterable 转换为 Collection,可能是将所有元素添加到 List (或 Set,具体取决于数据) .


-1
投票
根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现

Comparable

),因为为了计算最大值,必须能够计算出一个元素是否大于另一个元素(这正是类似的手段)。

Collections 类中的

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

© www.soinside.com 2019 - 2024. All rights reserved.