Function/Consumer/Supplier/Predicateなどなど
この辺の違いがわかればStreamのAPIをみたら色々推測しやすくなるかなぁ〜と思ったのでまとめ
Function @FunctionalInterface
値を受け取って他の値を返すもの。
値の変換とか色々を担当
なので、これを引数に取るStreamのAPIのほとんどは他の型のStreamを返すことが多い
Consumer @FunctionalInterface
Streamの消費者
値を受け取って何も返さない
これが動くことでStreamの各データ処理が稼働するという意味合いが強い
例外はpeekメソッドでpeekメソッドを使った場合Stream処理が続けれるのでpeekメソッドはLog出力などに利用可能
Collector
Streamの結果をまとめる
普通の関数型に存在してるはずのfoldが無いなぁ〜って思ったらこんなのがあった
これが動くことでStreamの各データ処理が稼働するという意味
foldでやりたいことの大半はCollectorsに用意されてるからまぁなんとか・・・
Supplier @FunctionalInterface
Streamへ値を供給する
引数は何もないけど、必要なだけ値を生成して返す
StreamがListとかだとあんまり出てこない
一部のAPIだけ利用してる
Optional
値が設定されていない可能性がある場合利用される
キャッシュとかの戻りが設定されてないときは・・・みたいな実装が素直に書けるのが特徴
Streamでよく使われているけど実はStreamとは無関係でかなり有用なクラス
Predicate @FunctionalInterface
比較
Streamの文脈で明確に出てくることはあんまりない