为什么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 。reduceBiFunction<Integer,String,Integer>Stream<String>BinaryOperator<Integer>BinaryOperator<String>
另一方面,组合器获取两个中间结果(都具有相同的 type U)并将它们合并成一个类型也是 的结果U。因此可以使用a BinaryOperator<U>(which extends )。BiFunction<U,U,U>