/*** https://www.baeldung.com/java-optional*/@Testpublic void optionalTest(){Peo peo = new Peo("weijie", 18);/*** of、ofNullable*///of 判断peo是否为空,如果不为空程序继续执行Optional<Peo> _of = Optional.of(peo);//程序直接抛出NullException
//        Optional<Peo> _ofNull = Optional.of(null);//ofNullable 不管值是否为空仍然执行Optional<Peo> _ofNullable = Optional.ofNullable(null);//如果值不为NULL则返回true,否则,falseSystem.out.println("_of: " + _of.isPresent());System.out.println("_ofNullable: " + _ofNullable.isPresent());/*** orElse、orElseGet、orElseThroe*///orElse 饿汉式,不管b中值是否为空仍然会加载到内存当中,高并发场景慎用Peo _orElse = _ofNullable.orElse(peo);System.out.println("_orElse: " + _orElse);//orElseGet 懒汉式,当b中值为null才加载到内存当中Peo _orElseGet = _ofNullable.orElseGet(() -> peo);System.out.println("_orElseGet:" +_orElseGet);//orElseThrow 当值不存在时候返回一个异常Peo _orElseThrow = _ofNullable.orElseThrow(() -> new IllegalArgumentException());System.out.println("orElseThrow: " + _orElseThrow);/*** filter*///判断值是否和另一个值相等,通常和isPresent()搭配使用Optional<Peo> _filter = _of.filter(p -> p.age == 18);System.out.println("_filter: " + _filter.isPresent());Optional<Peo> _filter2 = _of.filter(p -> p.age == 16);System.out.println("_filter: " + _filter2.isPresent());/*** map、flatMap*///map 如果optional中有值则传入函数体获取Optional特定值,否则返回空值Optional<Integer> _map = _of.map(Peo::getAge);boolean _age = _map.filter(age -> age >= 15).filter(age -> age <= 24).isPresent();System.out.println("_age: " + _age);//flatMap 该方法作用和map一样,区别是方法返回值不同 People::getAge -> Optional<Integer>类型People people = new People("weijie", 25);Optional<Integer> _flatMap = Optional.ofNullable(people).flatMap(People::getAge);System.out.println("_flatMap: " + _flatMap.get());}
    class Peo{String name;Integer age;public Peo(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Peo{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}class People{String name;Integer age;public People(String name, Integer age) {this.name = name;this.age = age;}public Optional<String> getName() {return Optional.ofNullable(name);}public void setName(String name) {this.name = name;}public Optional<Integer> getAge() {return Optional.ofNullable(age);}public void setAge(Integer age) {this.age = age;}}

阿里巴巴Java开发手册-使用JDK8的Opional类来防止出现NPE问题相关推荐

  1. 阿里巴巴 Java 开发手册 Java 开发手册(1.0.1)

    一.编程规约 (一) 命名规约 [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / nam ...

  2. 阿里巴巴 Java 开发手册之编程规约(一)-------我的经验

    阿里巴巴 Java 开发手册 一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: _name / __na ...

  3. 《阿里巴巴 Java 开发手册》读书笔记

    偶然看到阿里巴巴居然出书了???趁着满减活动(节约节约....)我赶紧买来准备看看,刚拿到的时候掂量了好多下,总觉得商家给我少发了一本书,结果打开才知道..原来这本书这么小.... 编码规范的重要性 ...

  4. 白话阿里巴巴Java开发手册(编程规约)

    本文欢迎转载,转载请注明原文链接,并附作者个人信息李艳鹏. 研发流程管理 最近,阿里巴巴发布了<阿里巴巴Java开发手册>,总结了阿里人多年一线实战中积累的研发流程规范,这些流程规范在一定 ...

  5. java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...

    一.写在开头 Java作为一个编程界最流行的语言之一,有着很强的生命力.代码的编写规范也是不容忽视的,今天,我就把自己阅读的国内的互联网巨头阿里巴巴的<阿里巴巴 Java 开发手册>一些精 ...

  6. [转]白话阿里巴巴Java开发手册高级篇

    不久前,阿里巴巴发布了<阿里巴巴Java开发手册>,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结 ...

  7. 304902阿里巴巴Java开发手册1.4.0

    转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速 ...

  8. 阿里巴巴Java开发手册v1.2.0版

    最近在忙毕设,读了阿里java开发手册后,发现可以更好的读懂别人的代码了,一些文件之间的关系通过命名就能看出了.对自己养成良好的编码风格也有极大的帮助. 本手册仅供大家交流.学习及研究使用,禁止用于商 ...

  9. 《阿里巴巴 Java开发手册》读后感

    前言 只有光头才能变强 前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦). 趁着学校校运会,合理地给自己放了一个小长假,然后就回家了.回到家才发现当时618 ...

最新文章

  1. 【转】SAP技术趋势及建议
  2. tp5数组为什么要中括号_VBA数组与字典解决方案第7讲:为什么要采用数组公式(一)...
  3. java-第九章-循环结构进阶-三个班级每班4位同学成绩大于85的算平均分.
  4. Spring Boot 2 + Redis 对象缓存
  5. 使用命令行的方式,将ini配置文件中的配置信息传递给程序
  6. 【Linux入门学习之】数据流重定向
  7. 关于miniconda的安装,配置以及包批量安装和使用
  8. ms12-20 远程桌面(RDP)3389漏洞
  9. NVDLA软件架构和源码解析 第一章—内核驱动
  10. 集成学习—SGBT随机梯度提升树
  11. jQuery 配置和基本语法
  12. Nginx取消泛解析
  13. 使用后缀自动机求后缀数组
  14. Android中文URL乱码问题 解决
  15. 根据key找到JSON字符串中指定的value值(Java实现)
  16. 从k-\epsilon到k-\omega
  17. 用python画一朵鲜艳欲滴的红玫瑰
  18. 使用ElementUi的tabs切换组件时下拉选择器出现破板情况
  19. 【基础】存储过程IN、OUT、INOUT参数模式
  20. 提高spark任务稳定性的解决方案及Blacklist 机制说明解释

热门文章

  1. OpenJTAG调试S3C2440裸板程序
  2. 协议簇:TCP 解析: 基础
  3. mysql用户添加_MySQL用户添加
  4. html留言板 php,linux下使用Apache+php实现留言板功能的网站
  5. 解决Entry fileTemplates//Singleton.java.ft not found in C:/Dev/android-studio/lib/resources_en.jar
  6. python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...
  7. 学好Java的八个条件
  8. vue加跨域代理静态文件404_vue-cli 设置跨域代理 线上地址报404
  9. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)
  10. matlab相机标定 外参数,相机外参数的标定.doc