1. 概要

この短いチュートリアルでは、Java IterableオブジェクトをStreamに変換し、いくつかの標準操作を実行してみましょう。

2. イテレータからストリームへの変換

Iterable インターフェースは、一般性を念頭に置いて設計されており、 stream()メソッドを単独で提供することはありません。

簡単に言うと、 StreamSupport.stream()メソッドに渡して、指定されたIterableインスタンスからStreamを取得できます。

イテレータインスタンスについて考えてみましょう。

Iterable<String> iterable 
  = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

そして、この IterableインスタンスをStream:に変換する方法は次のとおりです。

StreamSupport.stream(iterable.spliterator(), false);

StreamSupport.stream()の2番目のパラメーターは、結果のStreamを並列にするか順次にするかを決定することに注意してください。 パラレルStreamの場合は、trueに設定する必要があります。

それでは、実装をテストしてみましょう。

@Test
public void givenIterable_whenConvertedToStream_thenNotNull() {
    Iterable<String> iterable 
      = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

    Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false));
}

また、簡単な補足–ストリームは再利用できませんが、Iterableは再利用できます。 また、 spliterator()メソッドを提供します。このメソッドは、指定されたIterableによって記述された要素に対してjava.lang.Spliteratorインスタンスを返します。

3. Stream操作の実行

簡単なストリーム操作を実行してみましょう。

@Test
public void whenConvertedToList_thenCorrect() {
    Iterable<String> iterable 
      = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");

    List<String> result = StreamSupport.stream(iterable.spliterator(), false)
      .map(String::toUpperCase)
      .collect(Collectors.toList());

    assertThat(
      result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM"));
}

4. 結論

この簡単なチュートリアルでは、他のコレクションの場合と同じように、IterableインスタンスをStreamインスタンスに変換し、標準操作を実行する方法を示します。実例。

すべてのコードスニペットの実装は、Githubプロジェクトにあります。