《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.7.4 用f?latMap来构建Optional值的函数

简介: 本节书摘来华章计算机《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一书中的第1章 ,第1.7.4节,[美] 凯S.霍斯特曼(Cay S. Horstmann) 著陈昊鹏 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.7.4 用f?latMap来构建Optional值的函数

假设你有一个可以产生Optional对象的方法f,并且目标类型T具有一个可以产生Optionalimage对象的方法g。如果它们都是普通的方法,那么你可以通过调用s.f().g()来将它们组合起来。但是这种组合没法工作,因为s.f()的类型为Optional,而不是T。因此,需要调用:

如果s.f()的值存在,那么g就可以应用到它上面。否则,就会返回一个空Optionalimage
很明显,如果有更多的可以产生Optional值的方法或Lambda表达式,那么就可以重复此过程。你可以直接将对f?latMap的调用链接起来,从而构建由这些步骤构成的管道,只有所有步骤都成功时,该管道才会成功。
例如,考虑前一节中安全的inverse方法。假设我们还有一个安全的平方根:

那么你可以像下面这样计算倒数的平方根了:

或者,你可以选择下面的方式:

无论是inverse方法还是squareRoot方法返回Optional.empty(),整个结果都会为空。

注意:你已经在Stream接口中看到过f?latMap方法(参见1.3节),当时这个方法被用来将可以产生流的两个方法组合起来,其实现方式是摊平由流构成的流。如果将可选值当作尺寸为0和1的流来解释,那么Optional.f?latMap方法与其操作方式一样。

程序清单1-3中的示例程序演示了Optional API的使用方式。
程序清单1-3 optional/OptionalTest.java

java.util.Optional 8
Optionalimage flatMap(Function< super T,Optionalimage> mapper)
产生将mapper应用于当前的Optional值所产生的结果,或者在当前Optional为空时,返回一个空Optional。

相关文章
|
3天前
|
IDE Java API
使用Java Web技术构建RESTful API的实践指南
使用Java Web技术构建RESTful API的实践指南
|
1月前
|
开发框架 Java API
最新Java基础系列课程--Day13-高级特性(二)
最新Java基础系列课程--Day13-高级特性
|
2月前
|
Java Unix 程序员
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
51 1
|
1月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
43 0
|
25天前
|
JSON 安全 Java
JAVA8实战 - Optional工具类
JAVA8实战 - Optional工具类
78 0
|
1月前
|
安全 Java 程序员
Dating Java8系列之巧用Optional之优雅规避NPE问题
Dating Java8系列之巧用Optional之优雅规避NPE问题
17 0
|
1月前
|
存储 Java 关系型数据库
深入探索Maven:优雅构建Java项目的新方式(二)
深入探索Maven:优雅构建Java项目的新方式(二)
|
1月前
|
Java Maven
深入探索Maven:优雅构建Java项目的新方式(一)
深入探索Maven:优雅构建Java项目的新方式(一)
|
1月前
|
架构师 Java 测试技术
Java 编程问题:十二、`Optional`
Java 编程问题:十二、`Optional`
38 0
|
1月前
|
Java
java的OutputStream.writeUTF()函数
java的OutputStream.writeUTF()函数
29 4