Javaでストリーミング可能
1. 概要
この短いチュートリアルでは、JavaIterableオブジェクトをStreamに変換し、いくつかの標準操作を実行してみましょう。
2. IterableをStreamに変換する
Iterableインターフェースは、一般性を念頭に置いて設計されており、それ自体ではstream()メソッドを提供しません。
簡単に言えば、それをStreamSupport.stream()メソッドに渡して、指定されたIterableインスタンスからStreamを取得できます。
Iterableインスタンスについて考えてみましょう。
Iterable 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 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 iterable
= Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
List result = StreamSupport.stream(iterable.spliterator(), false)
.map(String::toUpperCase)
.collect(Collectors.toList());
assertThat(
result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM"));
}
4. 結論
この簡単なチュートリアルでは、他のCollectionインスタンスの場合と同じように、IterableインスタンスをStreamインスタンスに変換し、標準操作を実行する方法を示します。
すべてのコードスニペットの実装は、Github projectにあります。