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。

嗯……不,没有。如果你想使用 集合.max() 你必须转换你的 可迭代 变成一个 收藏 首先,可能将所有元素添加到 列表 (或者 , ,取决于数据)。

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

max() 方法 Collections 类中的类型基本上与您在那里发布的类型签名完全相同,因此它应该适合您的目的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top