Stream
新しい JDK8クラスに次のreduce
メソッドしか含まれていないのはなぜですか。
T reduce(BinaryOperator<T> reducer)
T reduce(T identity, BinaryOperator<T> reducer)
U reduce(U identity, BiFunction<U, ? super T, U> reducer,
BinaryOperator<U> combiner)
しかし、他の言語 (Haskell など) に見られるreduce
/関数に対応する明白なメソッドではなく、次のようになります。fold
foldl :: (a -> b -> a) -> a -> [b] -> a
U reduce(U identity, BiFunction<U, ? super T, U> reducer)
?
combiner
代わりに、追加の引数を持つ同様のメソッドがあります。上記でリンクした API ドキュメントでは、例でこの引数を使用していないため、使用方法もわかりません。必要なプロパティについてのみ言及しています。
fold
JDK8 メソッドがこのように作成されるのはなぜですか? また、標準の動作をエミュレートするにはどうすればよいですか?