JDK8的Optional类中map方法和flatMap方法的区别
程序员文章站
2022-03-04 11:49:20
...
先说结论:两种的区别是map的返回值Optional对象是在map方法里面自动封装好了。而flatMap方法是自己的实现的逻辑中自己封装。
1、源码
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}
注意map方法中最后一行代码为Optional.ofNullable,这是返回的时候自动把返回值包装好了。
2、例子
假设教师类里有一个地址的字段。地址类有城市字段。
//使用map
Optional<String> s1 = Optional.ofNullable(teacher1).map(tempTeacher -> tempTeacher.getAddress()).map(tempAddress -> tempAddress.getCity());
//或者简写为下面代码
Optional<String> s1 = Optional.ofNullable(teacher1).map(Teacher1::getAddress).map(Address::getCity);
//使用flatMap
//报错
Optional.ofNullable(teacher1).flatMap(Teacher1::getAddress);
//正确写法
Optional<String> s2 = Optional.ofNullable(teacher1).flatMap(tempTeacher -> Optional.ofNullable(tempTeacher.getAddress())).flatMap(tempAddress -> Optional.ofNullable(tempAddress.getCity()));
可以明显看到,flatmap需要自己包装返回值为Optional对象。而map自动包装好了。
【正在去BAT的路上修行!!!】
上一篇: WPF ScrollViewer滚动条根据内容自动滚动到底部
下一篇: 自定义标签的初步入门
推荐阅读
-
详解Python中__str__和__repr__方法的区别
-
Javascript中类式继承和原型式继承的实现方法和区别之处
-
[python] 在 python2和3中关于类继承的 super方法简要说明
-
关于jquery中attr()和prop()方法的区别
-
详解Javascript百度地图接口开发文档中的类和方法
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
PowerShell中调用.NET对象的静态方法、静态属性和类方法、类属性例子
-
荐 浅谈Java中类和对象的初始化、实例化以及方法重载的底层机制
-
Math类中round、ceil和floor方法的功能
-
Android中java.math.Math类常用的常量和方法