イテレータをリストに変換する
1. 概要
この短いチュートリアルでは、イテレータをJavaのリストに変換する方法を学習します。 whileループ、Java 8、およびいくつかの一般的なライブラリを使用したいくつかの例について説明します。
すべての例で、IteratorとIntegerを使用します。
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以降では、 IteratorのforEachRemaining()メソッドを使用して、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 を使用して、IteratorをListに変換します。 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
List<Integer> actualList = IteratorUtils.toList(iterator);
assertThat(actualList, containsInAnyOrder(1, 2, 3));
7. 結論
この記事では、イテレータをリストに変換するためのいくつかのオプションについて説明しました。 これを実現する方法は他にもいくつかありますが、一般的に使用されるいくつかのオプションについて説明しました。
これらすべての例とコードスニペットの実装は、GitHubのにあります。