331

などのコレクションがある場合Collection<String> strs、最初のアイテムを取り出すにはどうすればよいですか? を呼び出してIterator、最初の を取りnext()、次に を捨てることができIteratorます。無駄の少ない方法はありますか?

4

14 に答える 14

508

それが最善の方法のようです:

String first = strs.iterator().next();

Collection素晴らしい質問です...最初は、インターフェースの見落としのように思えます。

「最初」は、コレクションに最初に入れたものを常に返すとは限らず、順序付けられたコレクションに対してのみ意味があることに注意してください。get(item)順序が必ずしも保存されているとは限らないため、呼び出しがないのはそのためかもしれません。

少し無駄に思えるかもしれませんが、思ったほど悪くはないかもしれません。Iteratorには、通常はコレクション全体のコピーではなく、コレクションへのインデックス情報が含まれているだけです。このメソッドを呼び出すとIteratorオブジェクトがインスタンス化されますが、実際にはそれが唯一のオーバーヘッドです (すべての要素をコピーするのとは異なります)。

たとえば、ArrayList<String>.iterator()メソッドによって返される型を見ると、それが であることがわかりますArrayList::Itr。これは、リストの要素をコピーするのではなく、直接アクセスするだけの内部クラスです。

空であるか、実装に依存するiterator()可能性があるため、 の戻り値を必ず確認してください。null

于 2009-11-04T02:33:05.843 に答える
140

Iterables.get(yourC、indexYouWant)

実際、コレクションを使用している場合は、Googleコレクションを使用する必要があるためです。

于 2009-11-04T03:09:11.317 に答える
100

Java 8 の場合:

Optional<String> firstElement = collection.stream().findFirst();

古いバージョンの Java では、Guava Iterablesに getFirst メソッドがあります。

Iterables.getFirst(iterable, defaultValue)
于 2013-08-10T20:03:30.650 に答える
42

単にコレクションであるため、「最初の」アイテムなどはありませんCollection

Java ドキュメントのCollection.iterator()メソッドから:

要素が返される順序に関する保証はありません...

だから、できません。

Listなどの別のインターフェースを使用する場合は、次のことができます。

String first = strs.get(0);

ただし、コレクションから直接これを行うことはできません。

于 2009-11-04T02:26:38.820 に答える
5

あなたのコレクションはリストのようになりたいと思われるので、次のことをお勧めします。

List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
于 2009-11-04T02:34:30.817 に答える
0

コレクションがキューであることがわかっている場合は、コレクションをキューにキャストして簡単に取得できます。

順序を取得するために使用できる構造がいくつかありますが、それにキャストする必要があります。

于 2009-11-04T02:33:30.267 に答える
0

それは、使用した実装、arraylistlinkedlist、または set の他の実装に完全に依存します。

設定されている場合は、最初の要素を直接取得できます。それらは、コレクションのトリック ループであり、値 1 の変数を作成し、フラグ値が 1 のときに値を取得した後、そのループを中断します。

リストの実装であれば、インデックス番号を定義することで簡単です。

于 2015-10-28T10:12:07.313 に答える
0

Apache Commons Collections 4 を使用している場合は、IterableUtils.first方法があります。sの場合の最適化が含まれており、List使いやすいです。Guava メソッドと非常によく似ています。コードは次のようになります

String firstStr = IterableUtils.first(strs);
于 2022-02-07T16:18:10.050 に答える
-3

あなたはこれを行うことができます:

String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];

Collection の javadoc には、配列の要素の順序に関する次の注意事項があります。

このコレクションがイテレータによって返される要素の順序を保証する場合、このメソッドは要素を同じ順序で返す必要があります。

于 2009-11-04T02:32:07.383 に答える