1概要

この短いチュートリアルでは、Javaの

Iterable

オブジェクトを

Stream

に変換し、それに対していくつかの標準操作を実行しましょう。


2

Iterable

から

Stream


への変換


Iterable

インターフェースは、一般性を念頭に置いて設計されており、

stream()

メソッドを単独では提供しません。

簡単に言うと、

StreamSupport.stream()メソッドに渡して、指定された

Iterable

インスタンスから

Stream__を取得することができます。

私たちの

Iterable

インスタンスを考えてみましょう:

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 instance__を返します。


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結論

この簡単なチュートリアルでは、他の

Collection

インスタンスに対して行ったのと同じように、

Iterable

インスタンスを

Stream

インスタンスに変換して標準操作を実行する方法を示します。

すべてのコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/java-streams[Githubプロジェクト]にあります。