Ahm*_* M. 5 java reduce java-8 java-stream functional-interface
为什么方法中的累加器参数是Stream::reduce
a BiFunction
而不是BinaryOperator
像combiner参数一样.
为什么是它的类型 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);
Run Code Online (Sandbox Code Playgroud)
该累加器是添加的元素的函数Stream
(其类型由表示T
)连接到的中间结果reduce
的操作(其类型由表示U
),并返回更新的结果(也类型的U
).
因此,您无法将其定义为a BinaryOperator
,其中操作数和结果都是相同类型.
例如,您可以在调用a中作为累加器传递,该reduce
调用BiFunction<Integer,String,Integer>
应用于a Stream<String>
并生成所有元素的长度之和.你不能使用a BinaryOperator<Integer>
或a BinaryOperator<String>
.
另一方面,组合器获取两个中间结果(两者都是相同类型U
)并将它们合并到类型也是的结果中U
.因此BinaryOperator<U>
,BiFunction<U,U,U>
可以使用(延伸).
归档时间: |
|
查看次数: |
378 次 |
最近记录: |