首页 > 解决方案 > Stream.reduce 与身份和 Stream.reduce().orElse() 的区别是按位或归约的情况

问题描述

我尝试了以下两组代码,看不出结果有什么不同。我还尝试完成两者的实现,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);

是否有任何极端情况会导致不同的结果或以任何方式比另一种更好?

标签: javajava-streambitwise-or

解决方案


结果没有区别。

但是,我会将Stream<Long>元素拆箱到 aLongStream中,因此累加器不需要自动装箱结果。

有了这个,我会使用第二个选项。

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

推荐阅读