java中iterable<Integer>的Collections.max函数
-
22-07-2019 - |
题
Java Collections.max 仅采用可排序对象的集合。然而,由于集合不一定是排序的,因此我认为没有任何理由不为可迭代类型实现相同的 max 函数。
有没有一个最大的方法 Iterable<T extends Comparable<? super T>>
在java的标准库中?
解决方案
Collections.max
在1.2引入。 Iterable
在1.5介绍
这是罕见有一个Iterable
这不是一个Collection
。如果你这样做那么它直接实现(小心阅读规格)。如果你觉得这是非常重要的,你可以提交bugs.sun.com的RFE(或投票,如果已经有一个存在)。
其他提示
虽然 Guava 不是 Java 的标准库,但它已经足够接近了……
E com.google.common.collect.Ordering#max(Iterable<E> iterable)
例如 T max = Ordering.natural().max(myIterable);
至于为什么标准库没有实现,可能是因为 集合必须是有限的, , 但 Iterable 不一定是——而且,可以说,人们应该 绝不 如果非终止 Iterable 会导致代码永远循环,则接受 Iterable。
根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现 Comparable
)因为为了计算最大值,必须能够计算出一个元素是否大于另一个元素(这正是 Comparable 的含义)。
这 max() 方法 Collections 类中的类型基本上与您在那里发布的类型签名完全相同,因此它应该适合您的目的。
不隶属于 StackOverflow