JavaでのIterableからコレクションへの変換

1. 概要

このチュートリアルでは、* Javaで_Iterable_を_Collection_に変換するさまざまな方法について説明します。
単純なJavaソリューションから始め、次にGuavaおよびApache Commonsライブラリが提供するオプションを見ていきます。

*2. Iterable_および_Iterator *

最初に、_Iterable_を定義します。
Iterable<String> iterable = Arrays.asList("john", "tom", "jane");
また、単純な_Iterator_を定義して、_Iterable_から_Collection_への変換と_Iterator_から_Collection_への変換の違いを強調します。
Iterator<String> iterator = iterable.iterator();

*3. プレーンJava *の使用

* 3.1。 Iterable_から_Collection *

  • Java 8 forEach()_メソッドを使用して、すべての要素を_List *に追加できます。

@Test
public void whenConvertIterableToListUsingJava8_thenSuccess() {
    List<String> result = new ArrayList<String>();
    iterable.forEach(result::add);

    assertThat(result, contains("john", "tom", "jane"));
}
または、_Spterator_クラスを使用して、_Iterable_を_Stream_に、次に_Collection_ *に変換します。
List<String> result =
  StreamSupport.stream(iterable.spliterator(), false)
    .collect(Collectors.toList());

* 3.2。 Iterator_から_Collection *

一方、_forEach()_を使用する代わりに、_Iterator_で_forEachRemaining()_を使用します。
@Test
public void whenConvertIteratorToListUsingJava8_thenSuccess() {
    List<String> result = new ArrayList<String>();
    iterator.forEachRemaining(result::add);

    assertThat(result, contains("john", "tom", "jane"));
}
_Iterator_から_Spliterator_を作成し、それを使用して_Iterator_を_Stream_に変換することもできます。
List<String> result =
  StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
    .collect(Collectors.toList());

3.3. For-Loopの使用

非常に簡単なforループを使用して_Iterable_を_List_に変換するソリューションも見てみましょう。
@Test
public void whenConvertIterableToListUsingJava_thenSuccess() {
    List<String> result = new ArrayList<String>();
    for (String str : iterable) {
        result.add(str);
    }

    assertThat(result, contains("john", "tom", "jane"));
}
一方、_Iterator_とともに_hasNext()_および_next()_を使用します。
@Test
public void whenConvertIteratorToListUsingJava_thenSuccess() {
    List<String> result = new ArrayList<String>();
    while (iterator.hasNext()) {
        result.add(iterator.next());
    }

    assertThat(result, contains("john", "tom", "jane"));
}

*4. Guava *を使用する

これを達成するのに役立つ便利な方法を提供するライブラリもいくつかあります。
link:/guava-collections[Guava]を使用して_Iterable_から_List_に変換する方法を見てみましょう。
  • _Lists.newArrayList()_を使用して、_Iterable_または_Iterator_から新しい_List_を作成できます。*

List<String> result = Lists.newArrayList(iterable);
または、_ImmutableList.copyOf()_を使用できます。
List<String> result = ImmutableList.copyOf(iterable);

*5. Apache Commons *の使用

最後に、* https://www.baeldung.com/java-commons-lang-3 [Apache Commons] _IterableUtils_を使用して、_Iterable _:*から_List_を作成します。
List<String> result = IterableUtils.toList(iterable);
同様に、_IteratorUtils_を使用して、_Iterator_から_List_を作成します。
List<String> result = IteratorUtils.toList(iterator);

6. 結論

この短い記事では、Javaを使用して_Iterable_と_Iterator_を_Collection_に変換する方法を学びました。 プレーンJavaと2つの外部ライブラリGuavaとApache Commonsを使用したさまざまな方法を調査しました。
いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-collections-conversions[GitHub]で入手できます。