イテレータをリストに変換

1. 概要

この短いチュートリアルでは、_https://www.baeldung.com/java-iterator [Iterator] _を_https://www.baeldung.com/java-init-list-one-に変換する方法を学びます。 Javaのline [List] _。 whileループ、Java 8、およびいくつかの一般的なライブラリを使用したいくつかの例について説明します。
すべての例について、__ Integer__sで_Iterator_を使用します。
Iterator<Integer> iterator = Arrays.asList(1, 2, 3).iterator();

2. whileループを使用する

Java 8以前に伝統的に使用されていたアプローチから始めましょう。 * _while_ループを使用して* _Iterator_を_List_に変換します*:
List<Integer> actualList = new ArrayList<Integer>();
while (iterator.hasNext()) {
    actualList.add(iterator.next());
}

assertThat(actualList, containsInAnyOrder(1, 2, 3));

3. Java 8 _Iterator.forEachRemaining_の使用

Java 8以降では、_Iterator_’sの_forEachRemaining()_メソッドを使用して_List_を構築できます。 _List_インターフェイスの_add()_メソッドをlink:/java-method-references[method reference]として渡します。
List<Integer> actualList = new ArrayList<Integer>();
iterator.forEachRemaining(actualList::add);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

4. Java 8 Streams APIを使用する

次に、https://www.baeldung.com/java-8-streams [Java 8 Streams API]を使用して、_Iterator_を_List_に変換します。 _Stream_ APIを使用するには、*最初に_Iterator_を_https://www.baeldung.com/java-iterable-to-stream [Iterable] _ *に変換する必要があります。 Java 8 Lambda式を使用してこれを行うことができます。
Iterable<Integer> iterable = () -> iterator;
これで、* _ St​​reamSupport_クラスの_stream()_および_collect()_メソッドを使用して、_List_ *を作成できます。
List<Integer> actualList = StreamSupport
  .stream(iterable.spliterator(), false)
  .collect(Collectors.toList());

assertThat(actualList, containsInAnyOrder(1, 2, 3));

5. グアバの使用

link:/guava-lists[*Guavaライブラリ*] * Googleから、可変およびlink:/java-immutable-object[immutable] __List__s_の両方を作成するオプションが提供されます。 、_ *ので、両方のアプローチが表示されます。
最初に_ImmutableList.copyOf()_メソッドを使用して不変の_List_を作成しましょう。
List<Integer> actualList = ImmutableList.copyOf(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));
それでは、_Lists.newArrayList()_メソッドを使用して、変更可能な_List_を作成しましょう。
List<Integer> actualList = Lists.newArrayList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

[[apache=commons]]
=== 6. Apache Commonsを使用する

  • https://www.baeldung.com/apache-commons-collection-utils [Apache Commons Collections]ライブラリは、_Listで動作するオプションを提供します。 _ **変換を行うために_IteratorUtils_を使用します。

List<Integer> actualList = IteratorUtils.toList(iterator);

assertThat(actualList, containsInAnyOrder(1, 2, 3));

7. 結論

この記事では、_Iterator_を_List_に変換するためのいくつかのオプションについて説明しました。 これを実現する方法は他にもいくつかありますが、一般的に使用されるいくつかのオプションについて説明しました。
これらすべての例とコードスニペットの実装は、https://github.com/eugenp/tutorials/blob/master/java-collections-conversions/src/test/java/com/baeldung/convert/iteratortolist/ConvertIteratorToListServiceUnitTestにあります。 java [GitHub上]。