1. 概要

この短いチュートリアルでは、イテレータをJavaのリストに変換する方法を学習します。 whileループ、Java 8、およびいくつかの一般的なライブラリを使用したいくつかの例について説明します。

すべての例で、IteratorIntegerを使用します。

Iterator<Integer> iterator = Arrays.asList(1, 2, 3).iterator();

2. Whileループの使用

Java8より前に伝統的に使用されていたアプローチから始めましょう。 a while loop を使用して、イテレータをリストに変換します。

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以降では、 IteratorforEachRemaining()メソッドを使用して、Listを作成できます。 Listインターフェースのadd()メソッドをメソッド参照として渡します。

List<Integer> actualList = new ArrayList<Integer>();
iterator.forEachRemaining(actualList::add);

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

4. Java 8StreamsAPIの使用

次に、 Java 8 Streams API を使用して、IteratorListに変換します。 Stream APIを使用するには、最初に最初にIteratorをIterableに変換する必要があります。 これは、Java8Lambda式を使用して行うことができます。

Iterable<Integer> iterable = () -> iterator;

これで、 StreamSupportクラスのstream()メソッドとcollect()メソッドを使用してListを作成できます。

List<Integer> actualList = StreamSupport
  .stream(iterable.spliterator(), false)
  .collect(Collectors.toList());

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

5. グアバの使用

GoogleのGuavaライブラリには、可変リストと不変リストの両方を作成するオプションがあります。そのため、両方のアプローチを見ていきます。

まず、 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));

6. ApacheCommonsの使用

The Apache Commons Collectionsライブラリは、リストを操作するためのオプションを提供します。 使用します IteratorUtils 変換を行うには:

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

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

7. 結論

この記事では、イテレータリストに変換するためのいくつかのオプションについて説明しました。 これを実現する方法は他にもいくつかありますが、一般的に使用されるいくつかのオプションについて説明しました。

これらすべての例とコードスニペットの実装は、GitHubにあります。