Stream APIでの非同期処理
メソッド | 概要 | Since |
---|---|---|
java.util.stream.BaseStream#parallel | 並列ストリームへの変換 | 1.8 |
java.util.Collection#parallelStream | コレクション要素の並列ストリーム取得 | 1.8 |
java.util.SplittableRandom | 乱数ストリームの生成 | 1.8 |
- Stream API並列ストリーム処理はFork/Joinフレームワーク上に実装されている。ExecutorServiceとしてForkJoinPool.commonPool()が利用される。
- Streamに対して Stream#parallel を実行すると、Streamの各要素は並列に実行される。 逆に Stream#sequential を実行すると、逐次実行となる。
- parallel/sequential はStream全体に対する設定である。 特定の中間操作のみを並列・逐次実行のどちらかに切り替えて実行するようにはなっていない。
- もしこのような処理を行うのなら、一度終端操作でStreamを閉じ、新たにStreamを作成する必要がある
参考
Stream instanceを取得
- Java8 の Stream 取得方法あれこれ
- Iteratorから
- 配列から
- Enumeration から
- 文字列から
- Stream#iterate
- Stream#generate
examples
// java.util.stream.Stream#of
Stream<String> stream = Stream.of("A", "B", "C")
// java.util.Arrays#stream
String<String> stream = Arrays.stream(new String[] {"A", "B", "C"})
// java.util.Collection#stream
List<String> list = Arrays.asList("A", "B", "C")
Stream<String> stream = list.stream();
// java.lang.CharSequence#chars
String str = "ABC";
IntStream streamf = str.chars()
Stream#forEach
Stream#flatMap
- Java 8 flatMap example
- Collectionの中にネストしたCollectionがある場合
- mapはCollectionの要素を取り出して変換を行うメソッドで
- flatMapはCollectionの要素を取り出してStreamへの変換を行う