这篇文章主要讲解了“Optional处理null的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Optional处理null的方法有哪些”吧!

10年专注成都网站制作,成都定制网站,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都定制网站,高端网页制作,对食品包装袋等多个领域,拥有多年的营销推广经验。
一、聊聊NullPointerException
  相比做Java开发的,见到NullPointerException肯定不陌生吧,可以说见到它深恶痛绝。在开发时认为不会出现NullPointerException异常,最终到了生产环境,就给你来点意外惊喜。但是在开发时处理对象为空的通常都是用if(null != xxx),或者使用一些工具类,比如:if(ObjectUtils.isEmpty(xxx)),可以看出这种处理会让我们的代码变得很臃肿,遇到一个对象时可能都要这样来一下。   使用Optional类就可以避免在程序中使用一堆的if来处理空了。下表列出Optional类中的方法: |方法名|描述| |:--|:-- |empty|返回一个空的Optional实例 |of|将指定值用Optional封装后返回,如果值为null,则抛出NullPointerException异常 |ofNullable|将指定值用Optional封装后返回,如果值为null,则返回空的Optional对象 |get|如果值存在,则返回该值,否则抛出NullPointerException异常 |isPresent|检查值是否存在,存在返回true,否则返回false |ifPresent|如果值存在,就执行使用该值的方法调用,否则什么都不做 |filter|如果值存在并且满足提供的谓词,就返回包含该值的Optional对象,否则返回空的Optional对象 |map|如果值存在,就对该值执行提供的mapping函数调用 |flatMap|如果值存在,就对该值执行提供的mapping函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象 |orElse|如果值存在就将其返回,否则返回指定的的值 |orElseGet|如果值存在就将其返回,否则返回由指定的Supplier接口生成的值 |orElseThrow|如果值存在就将其返回,否则抛出由指定的Supplier接口生成的异常 下面就一一来详细使用上面列出的方法。
二、使用Optional类
2.1 empty
Optionaluser = Optional.empty(); 
创建一个空的Optional对象
2.2 of
User user = null; Optionaloptional = Optional.of(user); 
user为空,直接报NullPointerException异常,因此该方法一般很少用。
2.3 ofNullable
User user = null; Optionaloptional = Optional.ofNullable(user); 
user为空,则返回空的Optional对象
2.4 get
User user = null; Optionaloptional = Optional.ofNullable(user); optional.get(); 
从Optional中获取值,如果值不存在则抛出如下异常:java.util.NoSuchElementException: No value present
2.5 isPresent
User user = null; Optionaloptional = Optional.ofNullable(user); optional.isPresent(); 
以上例子返回false,如果user不为空,则返回true
2.6 ifPresent
User user = null; Optionaloptional = Optional.ofNullable(user); optional.ifPresent(us->{ //user不为空,执行 }); 
2.7 filter
User user = new User();
user.setName("小A");
boolean result = Optional.ofNullable(user).filter(us -> "小A".equals(us.getName())).isPresent();如果用户名为小A,则返回true,否则返回false
2.8 map
User user = new User();
user.setName("小A");
String name = Optional.ofNullable(user).map(User::getName).get();如果user不为空,则抽取name属性,使用get()获取。这里如果name为空,则会报异常,因此通常都是指定默认值或使用自定义异常抛出。
String name = Optional.ofNullable(user).map(User::getName).orElse("");或
String name = Optional.ofNullable(user)
                .map(User::getName)
                .orElseThrow(()->new RuntimeException("用户名不能为空"));2.9 flatMap
该方法一般用于从类中获取其他类的中某个属性,比如一个班级里面有学生,学生里面有地址,现在需要获取这个班级下的某个学生的地址,按之前的写法:
Address address = new Address();
address.setAddr("天河区");
Student student = new Student();
student.setName("小A");
student.setAddress(address);
Grade grade = new Grade();
grade.setName("三年级2班");
grade.setStudent(student);
if(!ObjectUtils.isEmpty(grade)){
    Student student1 = grade.getStudent();
    if(!ObjectUtils.isEmpty(student1)){
        Address address1 = student1.getAddress();
        if(!ObjectUtils.isEmpty(address1)){
            System.out.println(address1.getAddr());
        }
    }
}为了程序不出问题,就会写一大堆的if来判断,下面用flatMap来看下怎么实现:
Optional.ofNullable(grade)
                .flatMap(g->Optional.ofNullable(g.getStudent()))
                .flatMap(s->Optional.ofNullable(s.getAddress()))
                .map(Address::getAddr)
                .orElse("")或
Optional.ofNullable(grade)
        .map(Grade::getStudent)
        .map(Student::getAddress)
        .map(Address::getAddr)
        .orElse("")2.10 orElse
Optional.ofNullable(grade).orElse(new Grade());
2.11 orElseGet
Optional.ofNullable(grade).orElseGet(()->new Grade());
2.12 orElseThrow
Optional.ofNullable(grade).orElseThrow(()->new RuntimeException("班级不能为空"));以上Optional类的全部方法的使用都列出来了。
感谢各位的阅读,以上就是“Optional处理null的方法有哪些”的内容了,经过本文的学习后,相信大家对Optional处理null的方法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
当前文章:Optional处理null的方法有哪些
网站地址:http://www.cqwzjz.cn/article/jssejg.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 