为什么Stream::reduce
方法 a中的累加器参数BiFunction
与BinaryOperator
组合器参数不同。
为什么是它的类型 BiFunction<U, ? super T, U>
?为什么T
?应该是BiFunction<U, ? extends U, U>
吗?
为什么Stream::reduce
方法 a中的累加器参数BiFunction
与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
)。
因此,您不能将其定义为 a BinaryOperator
,其中操作数和结果都是同一类型。
例如,您可以在调用 a中将其作为累加器传递,该调用应用于 a并产生所有元素的长度之和。您不能为此使用 a或 a 。reduce
BiFunction<Integer,String,Integer>
Stream<String>
BinaryOperator<Integer>
BinaryOperator<String>
另一方面,组合器获取两个中间结果(都具有相同的 type U
)并将它们合并成一个类型也是 的结果U
。因此可以使用a BinaryOperator<U>
(which extends )。BiFunction<U,U,U>