}
3)测试代码
public static void main(String[] args) {
Integer value1 = 5;
Integer value2 = 6;
Optional<Integer> optional1 = Optional.ofNullable(value1);
Optional<Integer> optional2 = Optional.of(value2);
Optional<Integer> result =optional1.filter(t->t > 5);
System.out.println("optional1的filter后的值:"+result);
result =optional2.filter(t->t > 5);
System.out.println("optional2的filter后的值:"+result);

文章插图
2.3.6 映射方法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(Function<t, u=""> mapper): 如果存在一个值 , 则对其应用提供的映射函数 , 如果结果非空 , 则返回描述结果的Optional 。否则返回一个空的Optional 。
- flatMap(Function< T,Optional> mapper): 如果有值 , 则对其应用提供的可选映射函数 , 返回结果 , 否则返回空的可选函数 。这个方法类似于map(Function) , 但是提供的映射器的结果已经是一个可选的 , 如果调用 , flatMap不会用额外的可选的包装它 。
- 区别:map会自动将u放到optional中 , 而flatMap则需要手动给u创建一个optional
public static void main(String[] args) {
User user1 = null;
User user2 = new User("user2名字",19);
Optional<User> optional1 = Optional.ofNullable(user1);
Optional<User> optional2 = Optional.of(user2);
System.out.println("=========map==========");
System.out.println("optional1的map前的值:"+optional1);
Optional<String> result =optional1.map(t->t.getName());
System.out.println("optional1的map后的值:"+result);
System.out.println("optional2的map前的值:"+optional2);
result =optional2.map(t->t.getName());
System.out.println("optional2的map后的值:"+result);
System.out.println("===========flatMap========");
System.out.println("optional1的flatMap前的值:"+optional1);
Optional<Integer> result2 =optional1.flatMap(t->Optional.ofNullable(t.getAge()));
System.out.println("optional1的flatMap后的值:"+result2);
-
经验总结扩展阅读
- Go 源码解读|如何用好 errors 库的 errors.Is 与 errors.As() 方法
- Optional 常用方法总结
- 走到尽头结局解析?
- 西西里的美丽传说解析?
- LOL血港开膛手派克技能解析及玩法技巧?
- 王者荣耀孙策技能解析?
- 英魂之刃李探花出装打法解析?
- 王者荣耀中钟馗技能解析以及如何连招?
- 英雄联盟lol青钢影卡蜜尔技能玩法解析?
- 野荷塘网站源码,野荷塘网站模板哪里可以买到?