Java实现Optional优雅地判空的使用

 更新时间:2025年07月10日 09:54:03   作者:邓不利东  
本文介绍了Java8的Optional类如何在实际业务中用于更优雅地处理变量和对象的判空问题,包括设置默认值、创建集合以及获取对象属性等场景,感兴趣的可以了解一下

前言

Optional类是JDK8引入的一个新类。在这之前,Java在变量、对象、集合的判空处理上并不优雅。本篇博客以实际业务场景为例梳理Optional类在实际业务场景中如何优雅地判空,并不会连篇累牍地介绍Optional类的所有api及用法。

如果你想全面地学习并了解Optional类的用法,以及类里的所有api,麻烦移步其他博客。

场景一、

  1. 当需要对变量判空,如果为空则设置默认值;

  1. 当需要对对象或集合判空,如果为空则新建;

// 比如有一个String类型的变量str,需要对其判空,如果为空则设置为空字符串
// 这个场景十分普遍。就是当从数据库请求到数据后,需要封装后返回给前端,这时对字段就需要做判空处理。
String str = Optional.ofNullable(str).orElse(Strings.EMPTY);
 
 
// 比如有一个ArrayList类型的变量strList,需要对其判空,如果为空则new一个ArrayList
List<String> newList = Optional.ofNullable(strList).orElse(new ArrayList<>());
 
// 这时如果需求变了,如果为空则new一个有默认值的ArrayList,则可以写成如下:
List<String> newList2 = Optional.ofNullable(strList).orElseGet(()->{
            List<String> strList2 = new ArrayList<>();
            strList2.add("1");
            strList2.add("2");
            strList2.add("3");
            return strList2;
        });
 
// 这时我们发现这样的写法可读性太差,不优雅,则可以把lambda表达式中的这段代码抽离成独立的方法,写成如下:
List<String> newList3 = Optional.ofNullable(strList).orElseGet(() -> getDefaultList());
 
public static List<String> getDefaultList() {
    List<String> strList2 = new ArrayList<>();
    strList2.add("1");
    strList2.add("2");
    strList2.add("3");
    return strList2;
}
 
// 这时,如果发现其实new出来的这个新的ArrayList后续不需要做增删操作,只用于读操作,那么又可以简化成如下:
List<String> newList4 = Optional.ofNullable(strList).orElse(Arrays.asList("1", "2", "3"));

场景二、

  1. 对变量判空后,如果变量有值,需要做其他的业务处理;

// 比如有一个String类型的变量str,需要对其判空,如果非空则将该变量放入一个ArrayList中,则可以写成如下:
List<String> strList = new ArrayList<>();
Optional.ofNullable(str).ifPresent(e-> strList.add(e));
 
// 这里,上面的代码其实也可以用lambda表达式中的“方法引用”方式简写成如下:
Optional.ofNullable(str).ifPresent(strList::add);

场景三、

  1. 对对象判空后,如果对象有值,需要提取该对象中的属性值;

// 如下场景就是对user对象判空,如果user不为空,则取出user对象的username字段值
User user = new User();
String userName = Optional.ofNullable(user).map(e -> user.getUsername()).orElse(Strings.EMPTY);
 
// 同理,上面的代码也可以用lambda表达式中的“方法引用”方式简写
String userName = Optional.ofNullable(user).map(User::getUsername).orElse(Strings.EMPTY);

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

相关文章

  • IDEA一键部署SpringBoot项目到服务器的教程图解

    IDEA一键部署SpringBoot项目到服务器的教程图解

    本文通过图文并茂的形式给大家介绍IDEA一键部署SpringBoot项目到服务器的教程,非常不错,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-02-02
  • Java通过JavaMail发送邮件功能

    Java通过JavaMail发送邮件功能

    这篇文章主要为大家详细介绍了Java通过JavaMail发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java解压和压缩带密码的zip文件过程详解

    Java解压和压缩带密码的zip文件过程详解

    这篇文章主要介绍了Java解压和压缩带密码的zip文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们来学习一下吧
    2019-06-06
  • java参数传递之值传递和引用传递

    java参数传递之值传递和引用传递

    这篇文章主要介绍了java参数传递之值传递和引用传递,引用了两个代码实例来讲解,有感兴趣的同学可以研究下
    2021-02-02
  • Java Lombok实现手机号码校验的示例代码

    Java Lombok实现手机号码校验的示例代码

    手机号码校验通常是系统开发中最基础的功能之一,本文主要介绍了Java Lombok实现手机号码校验的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java实现多人聊天室(含界面)

    Java实现多人聊天室(含界面)

    这篇文章主要为大家详细介绍了Java实现多人聊天室,包含界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Java spring 通过注解方式创建对象的示例详解

    Java spring 通过注解方式创建对象的示例详解

    这篇文章主要介绍了java spring 通过注解方式创建对象,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 详解Java8 StreamAPI中的map()方法

    详解Java8 StreamAPI中的map()方法

    Stream API 是Java8中新加入的功能,这篇文章主要带大家了解一下 Stream API 中的 map() 方法的使用,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • springboot实现jar运行复制resources文件到指定的目录(思路详解)

    springboot实现jar运行复制resources文件到指定的目录(思路详解)

    这篇文章主要介绍了springboot实现jar运行复制resources文件到指定的目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • RSA加密的方式和解密方式实现方法(推荐)

    RSA加密的方式和解密方式实现方法(推荐)

    下面小编就为大家带来一篇RSA加密的方式和解密方式实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论