Javaでストリーミングを繰り返す
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プロジェクトにあります。