6

Stream::reduceメソッドの accumulator 引数がa であり、combiner 引数のようなaBiFunctionではないのはなぜですか。BinaryOperator

なぜその型は BiFunction<U, ? super T, U>? なぜTですか?それはすべきBiFunction<U, ? extends U, U>ですか?

4

1 に答える 1

8
<U> U reduce(U identity,
             BiFunction<U, ? super T, U> accumulator,
             BinaryOperator<U> combiner);

アキュムレータは、の要素Stream(型は で示されます) を演算Tの中間結果(型は で示されます) に追加し、更新された結果 (型も ) を返す関数です。reduceUU

BinaryOperatorしたがって、オペランドと結果がすべて同じ型であるとして定義することはできません。

たとえば、 aに適用され、すべての要素の長さの合計を生成する呼び出しでアキュムレータとして渡すことができます。そのために aまたは aを使用することはできません。reduceBiFunction<Integer,String,Integer>Stream<String>BinaryOperator<Integer>BinaryOperator<String>

一方、コンバイナは 2 つの中間結果 (両方とも同じ型U) を取得し、それらをマージして型も の結果にしUます。したがって、BinaryOperator<U>(を拡張BiFunction<U,U,U>する) を使用できます。

于 2016-12-08T09:36:15.363 に答える