- java.util.streamパッケージのこと。データをパイプラインで処理する。
- ストリームパイプラインを構成して処理を行う
ストリームパイプラインの要素
- データソースからストリームを形成
- 上に続く0個以上の中間操作(遅延操作!終端操作が実行されるまで実際には実行されない)
- パイプラインの最後で1つの終端操作
- 終端操作によって処理が適用される。終端処理を記述しないとストリームの処理は実行されない(コンパイルエラーにはならない)
ストリームの生成
- インターフェースやクラスで提供される
ストリームの中間操作
- 中間操作のメソッドも提供されている。多くは関数型インターフェースを引数に受け取る
要素のフィルタ
filter()はストリームの全ての要素を調べてtrueの要素を返すdropWhile()は最初にfalseが現れた以降の要素を返すtakeWhile()は先頭から連続してtrueの間の要素を返す
ストリームの終端操作
- java.util.OptionalクラスはTをラップするコンテナオブジェクトとして使用する
- nullチェックのボイラープレートコードなしでもヌルポを避けることができる
終端操作のメソッド
主に以下の目的でメソッドを使用する
- 要素の探索: findAny(),findFirst(),allMatch()など、ショートサーキットな終端操作であり、結果が確定すると処理を終了する
- 要素の集計: count(),max(),min()など
- 要素の蓄積: toList(),toArray()
- 要素のリダクション: reduce(),collect()、リダクションとはストリームの要素を一つに集約する処理。広義では上2つもリダクション
可変リダクション操作
Collector<T,A,R>インターフェースとCollectorクラス
- Collect()は可変リダクションを行うメソッド、ストリーム要素を可変コンテナに蓄積して処理を行った結果を返す