iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >教你怎么使用Optional处理null
  • 117
分享到

教你怎么使用Optional处理null

2024-04-02 19:04:59 117人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、聊聊NullPointerException二、使用Optional类2.1 empty2.2 of2.3 ofNullable2.4 get2.5 isPresent2.6

一、聊聊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


Optional<User> user = Optional.empty();

创建一个空的Optional对象

2.2 of


User user = null;
Optional<User> optional = Optional.of(user);

user为空,直接报NullPointerException异常,因此该方法一般很少用。

2.3 ofNullable


User user = null;
Optional<User> optional = Optional.ofNullable(user);

user为空,则返回空的Optional对象

2.4 get


User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.get();

Optional中获取值,如果值不存在则抛出如下异常:java.util.NoSuchElementException: No value present

2.5 isPresent


User user = null;
Optional<User> optional = Optional.ofNullable(user);
optional.isPresent();

以上例子返回false,如果user不为空,则返回true

2.6 ifPresent


User user = null;
Optional<User> optional = 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你怎么使用Optional处理null

本文链接: https://www.lsjlt.com/news/126318.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 教你怎么使用Optional处理null
    目录一、聊聊NullPointerException二、使用Optional类2.1 empty2.2 of2.3 ofNullable2.4 get2.5 isPresent2.6...
    99+
    2022-11-12
  • 教你JVM怎么使用nativememory
    目录JRE如何使用native存储Java堆和GCThe Just-in-time (JIT) compilerClasses and classloadersJNINIOThrea...
    99+
    2023-05-15
    JVM使用native memory JVM native memory
  • 教你怎么用Python处理excel实现自动化办公
    目录一、介绍二、步骤三、完整代码一、介绍 实现的是把某个文件夹下的所有文件名提取出来,放入一个列表,在与excel中的某列进行对比,如果一致的话,对另一列进行操作,比如我们在统计人员...
    99+
    2022-11-12
  • 教你怎么使用Java实现WebSocket
    目录一、WebSocket简介1.1 WebSocket协议1.2 WebSocket支持的消息类型二、创建一个WebSocket程序2.1 生命周期方法2.2 业务逻辑方法2.3 ...
    99+
    2022-11-12
  • 教你微软win10升级助手怎么下载使用
    win10系统是现在主流的操作系统,不少网友打算借助微软win10升级助手工具给自己的电脑升级安装win10系统使用,但是不知道win10升级助手怎么下载使用。下面小编就教下大家下载使用win10升级助手的方法。具体的方法如下:1、打开网页...
    99+
    2023-07-16
  • 实时数据处理离不开对象,Java学习笔记教你怎么做!
    实时数据处理是现代信息技术中不可或缺的一部分,而对象的概念则是Java语言的核心。本篇文章将介绍如何在Java中利用对象进行实时数据处理,并配以演示代码。 一、对象的概念 在Java中,对象是一种具有特定属性和行为的实体。具体来说,对象包...
    99+
    2023-09-24
    学习笔记 对象 实时
  • Python基础之教你怎么在M1系统上使用pandas
    一、问题 目前为止,M1系统上还不能使用pip3安装pandas库,无法使用pandas进行数据分析和处理。虽然网上也有专门适配M1的python环境,但实施起来也比较麻烦,不够纯粹...
    99+
    2022-11-12
  • 教你Win7系统怎么使用强制退出快捷键
    win7系统有很多快捷键功能,我们可以通过快捷键功能快速对电脑进行某些操作,比如说在使用应用程序出现卡顿无法操作的时候可以强制退出应用程序等。下面小编会教大家如何在Win7系统中使用强制退出快捷键。方法一:1、按下【ctrl】+【alt】+...
    99+
    2023-07-10
  • 教你怎么使用hadoop来提取文件中的指定内容
    目录一、需求二、步骤三、结果一、需求 把以下txt中含“baidu”字符串的链接输出到一个文件,否则输出到另外一个文件。 二、步骤 1.LogMapper.java pa...
    99+
    2022-11-12
  • 使用Go语言处理日志,你需要知道什么?
    日志是一个系统中必不可少的组成部分。它可以帮助我们了解系统的运行状况、排查问题和进行性能分析。在Go语言中,处理日志非常简单,并且有很多成熟的库可供使用。本文将介绍如何使用Go语言处理日志,并向您展示一些最佳实践。 一、什么是日志? 日志...
    99+
    2023-09-26
    大数据 日志 leetcode
  • 怎么使用Dubbo异步处理
    这篇文章主要介绍“怎么使用Dubbo异步处理”,在日常操作中,相信很多人在怎么使用Dubbo异步处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Dubbo异步处理”...
    99+
    2022-10-19
  • 怎么使用css预处理器
    这篇文章给大家分享的是有关怎么使用css预处理器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 创建项目时未选择预处理器,需手动安装相应loader。...
    99+
    2022-10-19
  • 怎么使用Gitee来管理你的开源项目
    这篇文章主要介绍了怎么使用Gitee来管理你的开源项目的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Gitee来管理你的开源项目文章都会有所收获,下面我们一起来看看吧。一、注册账号并创建仓库首先,我们需...
    99+
    2023-07-05
  • 怎么使用Shell解析处理XML
    这篇文章给大家分享的是有关怎么使用Shell解析处理XML的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言前几天在干活的时候遇到一个需要解析处理xml文件的一个需求,当时考虑到逻辑比较复杂,因此用java慢慢搞...
    99+
    2023-06-09
  • css预处理器scss怎么使用
    这篇文章主要讲解了“css预处理器scss怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css预处理器scss怎么使用”吧!1. 为什么会出现css...
    99+
    2022-10-19
  • 怎么使用Android注解处理器
    小编给大家分享一下怎么使用Android注解处理器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.定义注解推荐New -> Module -> Ja...
    99+
    2023-06-14
  • c++图像处理库怎么使用
    在C++中,有一些流行的图像处理库可以使用。以下是一些常见的图像处理库及其使用方法: OpenCV:OpenCV是一个广泛使用的...
    99+
    2023-10-24
    c++
  • React18状态批处理怎么使用
    本篇内容介绍了“React18状态批处理怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!状态自动批处理18版本之前, 在合成事件之外的...
    99+
    2023-06-30
  • vue事件处理器怎么使用
    本篇内容介绍了“vue事件处理器怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!监听事件可以用v-on指令监听DOM事件来触发一些ja...
    99+
    2023-07-04
  • 怎么使用Batch批处理脚本
    这篇文章主要介绍“怎么使用Batch批处理脚本”,在日常操作中,相信很多人在怎么使用Batch批处理脚本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Batch批处理脚本”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作