java - 对 Java 8 可选* 值的操作。

标签 java java-8

Java 8 有许多 Optional 类,如 OptionalDoubleOptionalIntOptionalLong

有没有一种很好的方法来处理同类的 Optional 值?也就是说,我希望能够做到:

OptionalDouble d1 = OptionalDouble.of(1.);
OptionalDouble d2 = OptionalDouble.of(2.);
OptionalDouble d3 = OptionalDouble.of(3.);

OptionalDouble result = d1.add(d2).multiply(d3);

当然,如果其中任何一个为“空”,则结果应该为空。在谷歌搜索了一下后,我发现了一些代码示例,人们在其中使用了这些函数(例如 add),但它不是 API 的一部分(不再是了吗?)。

最佳答案

Optional的主要目的|是代表一个函数的return value that might be absent .

对流进行原始特化的目的是避免装箱/拆箱开销。与 OptionalInt和 friend 们有一个不可避免的装箱级别(如果它们不存在会更糟,因为替代方案是 Optional<Integer> ),但目的是让处理返回值的人立即取消装箱(或提供默认或如果不存在则抛出异常),然后从那时起处理实际的原语。

支持所有额外的 API 来对可选原语进行算术、比较等操作会增加更多的 API 膨胀。使用它会导致代码困惑、缓慢,与 Java 中已经存在的完美算术表达式语法相比,这是一个相当大的劣势。简而言之,在可选原语上添加一堆操作被认为没有用。

关于java - 对 Java 8 可选* 值的操作。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414903/

相关文章:

java - 在 Java 中使用 Supplier 有什么优势?

java - "Impossible"多线程情况下的NPE

java - 避免在 Java 8 stream reduce 方法中使用全局变量

java - 远程客户端NotBoundException

java - 如何在树莓派上运行javafx

Java8 : How can I use Pair in Hashmap

java - Spring JPA 多对多持久性问题

java - 在 Excel 文件中创建 Excel 图表

java - "manually"是否可以在 Java 中创建 java.lang.Method 的实例?

java - 返回并打印字段值或仅通过类方法打印值?