Stream::reduce
メソッドの accumulator 引数がa であり、combiner 引数のようなaBiFunction
ではないのはなぜですか。BinaryOperator
なぜその型は BiFunction<U, ? super T, U>
? なぜT
ですか?それはすべきBiFunction<U, ? extends U, U>
ですか?
Stream::reduce
メソッドの accumulator 引数がa であり、combiner 引数のようなaBiFunction
ではないのはなぜですか。BinaryOperator
なぜその型は BiFunction<U, ? super T, U>
? なぜT
ですか?それはすべきBiFunction<U, ? extends U, U>
ですか?
<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
アキュムレータは、の要素Stream
(型は で示されます) を演算T
の中間結果(型は で示されます) に追加し、更新された結果 (型も ) を返す関数です。reduce
U
U
BinaryOperator
したがって、オペランドと結果がすべて同じ型であるとして定義することはできません。
たとえば、 aに適用され、すべての要素の長さの合計を生成する呼び出しでアキュムレータとして渡すことができます。そのために aまたは aを使用することはできません。reduce
BiFunction<Integer,String,Integer>
Stream<String>
BinaryOperator<Integer>
BinaryOperator<String>
一方、コンバイナは 2 つの中間結果 (両方とも同じ型U
) を取得し、それらをマージして型も の結果にしU
ます。したがって、BinaryOperator<U>
(を拡張BiFunction<U,U,U>
する) を使用できます。