java - 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);
是否有任何极端情况会导致不同的结果或以任何方式比另一种更好?
解决方案
结果没有区别。
但是,我会将Stream<Long>
元素拆箱到 aLongStream
中,因此累加器不需要自动装箱结果。
有了这个,我会使用第二个选项。
long result = myList.stream()
.mapToLong(Long::longValue)
.reduce(0L, (a, b) -> a | b);
推荐阅读
- java - 我不能停止计时器,它不会停止重复自己
- java - java 8 写 utf-8 编码乱码
- spring-boot - Spring Reactor Web 客户端用例。用 WebClient 替换 RestTemplate
- android - 在本地网络上使用 Google 的 Python-ADB
- macos - Visual Studio for Mac - 自 mfractor 以来,自动完成功能不再起作用
- ibm-midrange - CPD3213 错误是否与 AS400 版本有关?
- html - 如何翻译具有风格换行符的文本/HTML?
- javascript - Chrome:Javascript 在“this”上下文中用 `window` 替换 `undefined`
- php - Assign a value to Codeigniter URI segment
- testing - 关于Botium支持的说明