<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
アキュムレータは(タイプT
で示されている)(タイプU
によって示される)reduce
演算の中間結果にStream
の要素を追加し、更新された結果を返す関数です。 (タイプU
も)。
したがって、オペランドと結果がすべて同じタイプのBinaryOperator
と定義することはできません。
たとえば、reduce
コールStream<String>
に適用され、すべての要素の長さの和を発生するBiFunction<Integer,String,Integer>
でアキュムレータとして渡すことがあります。そのためにBinaryOperator<Integer>
またはBinaryOperator<String>
を使用することはできません。
一方、コンバイナは、二つの中間結果(同じタイプU
の両方)を取り、その種類もU
ある結果にそれらをマージします。したがって、(これはBiFunction<U,U,U>
まで拡張されます)を使用することができます。
質問は完全には明らかではありませんが、http://stackoverflow.com/questions/35680706/what-are-good-reasons-for-choosing-invariance-in-an-api- (それはむしろ「逆の」質問であるように思われるが...) – Marco13