6

为什么Stream::reduce方法 a中的累加器参数BiFunctionBinaryOperator组合器参数不同。

为什么是它的类型 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到操作的中间结果reduce(其类型由 表示U)并返回更新的结果(也是类型U)。

因此,您不能将其定义为 a BinaryOperator,其中操作数和结果都是同一类型。

例如,您可以在调用 a中将其作为累加器传递,该调用应用于 a并产生所有元素的长度之和。您不能为此使用 a或 a 。reduceBiFunction<Integer,String,Integer>Stream<String>BinaryOperator<Integer>BinaryOperator<String>

另一方面,组合器获取两个中间结果(都具有相同的 type U)并将它们合并成一个类型也是 的结果U。因此可以使用a BinaryOperator<U>(which extends )。BiFunction<U,U,U>

于 2016-12-08T09:36:15.363 回答