Java8 Optional优雅空值判断的示例代码

 更新时间:2021年05月06日 08:23:29   作者:C疯仔  
这篇文章主要介绍了Java8 Optional优雅空值判断的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

先介绍一下API,与其他文章不同的是,本文采取类比的方式来讲,同时结合源码。而不像其他文章一样,一个个API罗列出来,让人找不到重点。

1、Optional(T value),empty(),of(T value),ofNullable(T value)

这四个函数之间具有相关性,因此放在一组进行记忆。

先说明一下,Optional(T value),即构造函数,它是private权限的,不能由外部调用的。其余三个函数是public权限,供我们所调用。那么,Optional的本质,就是内部储存了一个真实的值,在构造的时候,就直接判断其值是否为空。好吧,这么说还是比较抽象。直接上Optional(T value)构造函数的源码,如下图所示

方式一:

public static void implement(User user) throws Exception {
//        原始 ---> 01
        before01(user);
//        优化 ---> 01
        upgrade01(user);
    }

    public static String before01(User user) throws Exception {
//        if(user!=null){
//            if(user.getAddress()!=null){
//                Address address = user.getAddress();
//                if(address.getName()!=null){
//                    return address.getName();
//                }
//            }
//        }
//        throw new Exception("取值错误");
        if (null != user && null != user.getAddress() && null != user.getAddress().getName()) {
            return user.getAddress().getName();
        }
        throw new Exception("取值错误");
    }

    public static String upgrade01(User user) throws Exception {
        return Optional.ofNullable(user)
                .map(user1 -> user1.getAddress())
                .map(user2 -> user2.getName())
                .orElseThrow(() -> new Exception("取值错误"));
    }

方式二:

public static void before02(User user){
        if (null != user){
            test();
        }
    }

    public static void upgrade02(User user){
        Optional.ofNullable(user).ifPresent(user1 -> test());
    }

方式三:

public static User before03(User user) throws Exception{
        if(user!=null){
            String name = user.getName();
            if("King".equals(name)){
                return user;
            }
        }else{
            user = new User();
            user.setName("King");
            return user;
        }
        throw new Exception("取值错误");
    }

    public static void upgrade03(User user){
        Optional.ofNullable(user)
                .filter(user1 -> "King".equals(user.getName()))
                .orElseGet(() -> {
                    User user2 = new User();
                    user2.setName("King");
            return user2;
        });
    }

到此这篇关于Java8 Optional优雅空值判断的文章就介绍到这了,更多相关Java8 Optional空值判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 计算Java数组长度函数的方法以及代码分析

    计算Java数组长度函数的方法以及代码分析

    在本篇内容里,小编给大家整理了关于计算Java数组长度函数的方法以及代码分析内容,有兴趣的朋友么可以学习参考下。
    2022-11-11
  • Java深入讲解Bean作用域与生命周期

    Java深入讲解Bean作用域与生命周期

    这篇文章主要介绍了浅谈Spring中Bean的作用域和生命周期,从创建到消亡的完整过程,例如人从出生到死亡的整个过程就是一个生命周期。本文将通过示例为大家详细讲讲,感兴趣的可以学习一下
    2022-06-06
  • java 排序算法之快速排序

    java 排序算法之快速排序

    这篇文章主要介绍了java 排序算法之快速排序,文中通过图片和代码讲解相关知识非常详细,大家如果有需要的话可以参考一下这篇文章
    2021-09-09
  • 在java中使用dom解析xml的示例分析

    在java中使用dom解析xml的示例分析

    本篇文章介绍了,在java中使用dom解析xml的示例分析。需要的朋友参考下
    2013-05-05
  • springboot集成dubbo注解版的示例代码

    springboot集成dubbo注解版的示例代码

    这篇文章主要介绍了springboot集成dubbo注解版的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • java打印菱形及直角和等腰三角形的方法

    java打印菱形及直角和等腰三角形的方法

    用Java输出菱形本身是一个比较简单的问题,这是Java初学者都要编写的一个算法,下面这篇文章主要给大家介绍了关于java打印菱形及直角和等腰三角形的方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • MyBatis框架零基础快速入门案例详解

    MyBatis框架零基础快速入门案例详解

    MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架
    2022-04-04
  • Java+OpenCV实现图片中的人脸识别

    Java+OpenCV实现图片中的人脸识别

    这篇文章主要介绍了如何利用java opencv实现人脸识别功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • SpringBoot之Java配置的实现

    SpringBoot之Java配置的实现

    这篇文章主要介绍了SpringBoot之Java配置的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Springboot静态资源访问实现代码解析

    Springboot静态资源访问实现代码解析

    这篇文章主要介绍了Springboot静态资源访问实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论