6

Java Collections.max は、ソート可能なオブジェクトのコレクションのみを受け取ります。ただし、コレクションは必ずしもソートされているとは限らないため、反復可能な型に対して同じ max 関数を実装しない理由はありません。

Iterable<T extends Comparable<? super T>>javaの標準ライブラリにmaxメソッドはありますか?

4

4 に答える 4

15

Guava は Java の標準ライブラリではありませんが、十分に近いものです...

E com.google.common.collect.Ordering#max(Iterable<E> iterable)

例えばT max = Ordering.natural().max(myIterable);

標準ライブラリがそれを実装していない理由については、Collection は有限である必要があるが、Iterable は有限である必要がないためである可能性があります。また、終了しない Iterable によってコードがループする場合は、Iterable を受け入れるべきではありません。永遠に。

于 2011-04-06T15:04:04.890 に答える
5

Collections.max1.2で導入されました。Iterable1.5で導入されました。

Iterableではないを持つことはまれCollectionです。そうすれば、実装は簡単です (仕様をよく読んでください)。本当に重要だと思われる場合は、bugs.sun.com に RFE を送信できます (または、既に存在する場合は投票してください)。

于 2009-01-14T18:46:43.900 に答える
0

うーん…いいえ、ありません。Collections.max()を使用する場合は、最初にIterableCollectionに変換する必要があります。おそらく、すべての要素をList (またはデータに応じてSet ) に追加します。

于 2009-01-14T17:46:57.060 に答える
-1

定義により、コレクションの要素は「ソート可能」でなければなりません (具体的には、それらは を実装Comparableする必要があります)。これは、最大値を計算するために、ある要素が別の要素よりも大きいかどうかを判断できなければならないためです (これはまさに Comparable の意味です)。

Collections クラスのmax() メソッドには、基本的にそこに投稿した正確な型シグネチャがあるため、目的に合うはずです。

于 2009-01-14T17:50:26.367 に答える