English 中文(简体)
Java中iterable<Integer>的Collections.max函数
原标题:
  • 时间:2009-01-14 17:38:00
  •  标签:

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()方法的类型签名与您发布的内容几乎完全相同,因此它应该能够满足您的需求。





相关问题
热门标签