makotan _at_ gmail dot com

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の文脈で明確に出てくることはあんまりない