stream.reduce与identity和stream.reduce()的区别orelse()是按位或归约的情况

fdbelqdn  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(379)

我试了下面两组代码,结果没有任何差别。我也试着去执行这两个 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);

是否有任何角落的情况,这将导致不同的结果或是一个比另一个更好的方式?

23c0lvtd

23c0lvtd1#

结果没有差别。
不过,我会解开盒子 Stream<Long> 元素转换为 LongStream ,因此累加器不需要自动装箱结果。
有了这个,我就用第二个选项。

long result = myList.stream()
        .mapToLong(Long::longValue)
        .reduce(0L, (a, b) -> a | b);

相关问题