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);
System.out.println("optional2的flatMap前的值:"+optional2);
result2 =optional2.flatMap(t->Optional.ofNullable(t.getAge()));
System.out.println("optional2的flatMap后的值:"+result2);
}
public class User {
String name;
Integer age;
public User(String name,Integer age){
this.name = name;
this.age=age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
文章插图
3 应用实例3.1 错误用法
- 由于Optional并没有实现Serializable接口,所以不能作为类的属性 。
- 不要把Optional作为方法的参数 。
- 把if(x!=null)直接换成Optional.ofNullable(x).isPresent(),这样有过度编码的嫌疑 。
- 直接使用Optional.get()的返回值进行操作,String result =Optional.ofNullable(null).get().toString();这样还是会抛出异常的 。
if(atest!=null){
Btest btest =atest.getBtest();
if(btest!=null){
Ctest ctest = btest.getCtest();
if (ctest != null) {
name =ctest.getName();
}
}
}
name = Optional.ofNullable(atest).map(t->t.getBtest()).map(t->t.getCtest()).map(t->t.getName()).orElse("默认值");
4 总结通过对Optional源码解析和用例测试代码的运行结果 , 可以看出使用Optional可以优化null值判断代码,让代码变得更加优雅和整洁 。
自猿其说Tech-JDL京东物流技术与数据智能部作者:陈昌浩
推荐阅读
- Go 源码解读|如何用好 errors 库的 errors.Is 与 errors.As() 方法
- Optional 常用方法总结
- 92年属猴人注定的婚姻解析,要注意什么
- 手相女右手解析 教你如何看懂女人的手相
- 四种假断掌图片 手掌纹路帮解析
- 专家解析 耳再造手术大概多少钱
- 手相女右手解析什么是岛纹,跟纹路形状有关,会有一些不利影响
- 哈尔的移动城堡解析影评 哈尔的移动城堡解析?
- 住房贷款专项扣除标准是多少?住房贷款专项扣除全解析来了
- 主板的南北桥解析知识