Java的Collections.max仅接受可排序对象的集合。然而,由于集合不一定排序,因此我不认为没有实现相同的max函数适用于可迭代类型的理由。
Java标准库中是否有Iterable<T extends Comparable<? super T>>
的最大方法?
在Java标准库中是否有 Iterable&lt;T extends Comparable&lt;?超T&gt;>
的最大方法?
Java的Collections.max仅接受可排序对象的集合。然而,由于集合不一定排序,因此我不认为没有实现相同的max函数适用于可迭代类型的理由。
Java标准库中是否有Iterable<T extends Comparable<? super T>>
的最大方法?
在Java标准库中是否有 Iterable&lt;T extends Comparable&lt;?超T&gt;>
的最大方法?
Collections.max
是在1.2版本中引入的。Iterable
是在1.5版本中引入的。
很少有“可迭代”不是“集合”的情况。如果确实存在这样的情况,那么实现起来就很简单(请注意仔细阅读规范)。如果您认为这非常重要,可以在bugs.sun.com上提交一个RFE(或者如果已经有一个,请投票)。
尽管番石榴不是Java标准库,但它足够接近...
E com.google.common.collect.Ordering#max(Iterable<E> iterable)
的翻译为:
例如:T max = Ordering.natural().max(myIterable);
例如: T max = Ordering.natural().max(myIterable);
关于为什么标准库没有实现它,可能是因为集合必须是有限的,而可迭代对象不必是有限的 - 可以说,如果一个非终止的可迭代对象会导致您的代码永远循环,那么您应该永远不应该接受可迭代对象。
嗯… 不,没有。如果你想使用 Collections.max(),你必须先将你的 Iterable 转换成一个 Collection,可能通过将所有元素添加到一个 List(或者根据数据选择 Set)。
根据定义,集合的元素必须是“可排序的”(具体来说,它们必须实现Comparable
),因为为了计算最大值,必须能够确定一个元素是否大于另一个元素(这正是Comparable的意义)。
Collections类中的max()方法的类型签名与您发布的内容几乎完全相同,因此它应该能够满足您的需求。