Java iterable的Collections.max函数<;整数>;在爪哇

Java iterable的Collections.max函数<;整数>;在爪哇,java,collections,max,standard-library,Java,Collections,Max,Standard Library,max只接受可排序对象的集合。但是,由于集合不一定是排序的,所以我看不出有任何理由不为iterable类型实现相同的max函数 对于IterableHmm是否有max方法……不,没有。如果要使用,您必须将您的转换为第一个,可能需要将所有元素添加到(或,取决于数据)。根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现可比的),因为为了计算最大值,必须能够计算出一个元素是否大于另一个元素(这正是可比性的含义) Collections类中的基本上具有您发布在那里的确切类型签名,因此它应该适

max只接受可排序对象的集合。但是,由于集合不一定是排序的,所以我看不出有任何理由不为iterable类型实现相同的max函数


对于
IterableHmm是否有max方法……不,没有。如果要使用,您必须将您的转换为第一个,可能需要将所有元素添加到(或,取决于数据)。

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


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

Collections.max
是在1.2中引入的
Iterable
是在1.5中引入的


很少有
Iterable
不是
集合
。如果您这样做了,那么实现起来很简单(请仔细阅读规范)。如果你认为这真的很重要,你可以在bugs.sun.com上提交一份RFE(如果已经有RFE,也可以投票)。

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

e、 g.
T max=Ordering.natural().max(myIterable)


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

哪里说Collections.max只接受一个排序的集合?从文档上看,它似乎需要任何实现集合的东西。@Outlaw程序员:他就是这么说的。“…因为集合不一定是排序的…”我想计算一个不是集合的Iterable的最大值实现一个Iterable要实现两个函数,实现一个集合需要两倍以上的工作量。因此,如果我想对我创建的类进行快速的iterable,那么它就容易得多。Collections.max(新的ArrayList(0){@Override public Iterator Iterator(){return iterable.Iterator();}}});)@汤姆霍丁:你是个坏人。永远不要违反接口的约定。例如,Collections.max的实现可以合法地通过调用Collection#isEmpty()并在返回true时抛出错误来启动。@chrispy Yes(ish)。如果我在评论中添加一些评论,可能会有所帮助。调用
到数组
通常比调用
迭代器
具有更好的属性(适用于并发/同步实现,并且可能更快)。/我注意到集合中的许多类没有正确实现接口,集合接口也非常糟糕(请查看新的(在编写时)JavaSE8内容中缺少的抛出文档)。