Stream.reduce with identity 和 Stream.reduce().orElse() 的区别是按位或减少的情况
Difference in Stream.reduce with identity and Stream.reduce().orElse() is case of bit wise OR reduction
我尝试了以下两组代码,结果没有发现任何差异。我还尝试过 reduce(T identity, BinaryOperator<T> accumulator)
和 reduce(BinaryOperator<T> accumulator)
的实现,但当累加器函数按位或时无法注意到任何区别。
long result1 = myList.stream.reduce((a,b) -> a|b).orElse(0L);
long result2 = myList.stream.reduce(0L,(a,b) -> a|b);
是否有任何极端情况会导致不同的结果,或者一个在任何方面都比另一个更好?
结果没有区别。
不过我会拆箱 Stream<Long>
elements into a LongStream
,这样累加器就不需要自动装箱结果了。
有了这个,我会使用第二个选项。
long result = myList.stream()
.mapToLong(Long::longValue)
.reduce(0L, (a, b) -> a | b);
我尝试了以下两组代码,结果没有发现任何差异。我还尝试过 reduce(T identity, BinaryOperator<T> accumulator)
和 reduce(BinaryOperator<T> accumulator)
的实现,但当累加器函数按位或时无法注意到任何区别。
long result1 = myList.stream.reduce((a,b) -> a|b).orElse(0L);
long result2 = myList.stream.reduce(0L,(a,b) -> a|b);
是否有任何极端情况会导致不同的结果,或者一个在任何方面都比另一个更好?
结果没有区别。
不过我会拆箱 Stream<Long>
elements into a LongStream
,这样累加器就不需要自动装箱结果了。
有了这个,我会使用第二个选项。
long result = myList.stream()
.mapToLong(Long::longValue)
.reduce(0L, (a, b) -> a | b);