Optional的详细使用

10 篇文章 0 订阅
订阅专栏
本文介绍了如何在Java中使用Optional类进行对象创建、安全消费、获取值以及过滤操作,重点讲解了orElse和orElseGet的区别,以及map和flatMap的用法,帮助开发者避免空指针异常并提升代码健壮性。
摘要由CSDN通过智能技术生成

一、使用

1.创建对象

  • 1.1 Optional类似是包装类,可以把具体的数据封装在其中,然后使用里面封装好的方法可以有效防止空指针
    一般通过Optional类中的ofNullable方法来把数据封装到Optional类
public class Test03 {
    public static void main(String[] args) {
        Author author = author();
        Optional<Author> author1 = Optional.ofNullable(author);
        author1.ifPresent(author2 -> System.out.println(author2.getName()));
        author1.ifPresent(author2 -> System.out.println(author2.getAge()));
        System.out.println(author1);
    }
    public static Author author(){
        Author author = new Author(1,"峰哥",25);
        return author;
    }
}

结果:
在这里插入图片描述

  • 1.2 如果一个值确定不为空的情况下,可以使用Optional类中的of方法来把数据封装到Optional类(有bug,可以传个空试试)
Optional<Object> o = Optional.of(null);
        System.out.println(o);

结果:
在这里插入图片描述

  • 1.3 当判断发现某个计算返回值为null时,需要把null值封装成Optional对象返回,可以采用Optional类中的empty方法
 public static Optional<Author> getAuthor(){
        Author author = new Author(1,"峰哥",25);
        return author==null?Optional.empty():Optional.of(author);
    }
     Optional<Author> author2 = getAuthor();
     author2.ifPresent(s-> System.out.println(s.getName()));

结果:输出“峰哥”两字

2.安全消费

当获到一个Optional对象后需要对其中进行操作,可以通过Optional类中的ifPresent方法来消费其中的值

3.安全获取值

如果期望安全获取值,不推荐使用get,而是使用Optional提供的方法

  • 3.1 orElseGet
    获取数据并且设置数据为空的默认值,如果不为空则获取其中的数据,如果为空则获取设置的默认数据
 public static Optional<Author> getAuthor1(){
        Author author = new Author(1,"慕言",25);
        return Optional.ofNullable(author);
    }
    Optional<Author> author1 = getAuthor1();
        Author author = author1.orElseGet(() -> new Author());
        System.out.println(author.getName());

结果:输出“慕言”两字

  • 3.2 orElseThrow
    获取数据,如果不为空则获取其中的数据,如果为空则根据传入的数据来创建异常的抛出
 public static Optional<Author> getAuthor1(){
        Author author = new Author(1,"慕言",25);
        return Optional.ofNullable(author);
    }
     Optional<Author> author1 = getAuthor1();
        try {
            Author author = author1.orElseThrow( () -> new RuntimeException("数据为空"));
            System.out.println(author);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }

结果:
在这里插入图片描述

4.过滤

可以通过filter方法对数据进行过滤,如果原本有数据,但不满足判断的,则会变成一个无数据的Optional对象

 public static void main(String[] args) {
  testFilter();
  }
  private static void testFilter() {
        Optional<Author> author1 = getAuthor1();
        author1.filter(author -> author.getAge() > 18).ifPresent(author -> System.out.println(author.getName()));
    }
    public static Optional<Author> getAuthor1(){
        Author author = new Author(1,"慕言",25);
        return Optional.ofNullable(author);
    }

结果:输出“慕言”两字

5.判断

可以通过isPresent判断数据是否存在

public static void main(String[] args) {
  testFilter();
  }
  private static void testFilter() {
        Optional<Author> author1 = getAuthor1();
        if (author1.isPresent()) {
            System.out.println(author1.get().getName());
        }
         public static Optional<Author> getAuthor1(){
        Author author = new Author(1,"慕言",25);
        return Optional.ofNullable(author);
    }

结果:输出“慕言”两字

总结

1.orElse 和 orElseGet 方法区别:

orElse 方法:无论 value 是否为null,都会执行 orElse 里的方法
orElseGet 方法:只有 value=null 时,才会执行 orElseGet 里的方法
建议平时使用 orElseGet 方法,少用 orElse 方法!

2.map 和 flatMap 方法区别:

map 方法: map: 判断 value 是否为null ,value为null,则返回 Optional.EMPTY 常量 ; value不为null,则返回 Optional包装结果
flatMap 方法:value为null,返回值同 map方法; value不为null,则返回入参的Optional包装参数

聊一聊Java8 Optional,让你的代码更加优雅
m0_56069948的博客
04-01 676
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 码农在囧途 随着时间的推移,曾经我们觉得重要的东西,可能在今天看来是如此的浅薄和无知,同理,今天我们放不下,想不开,觉得重要的东西,多年后我们可能也会觉得也就那样,所以,今天的的所有烦恼,忧愁,想不开,其实我们都没必要过于在意,因为有些东西随着时间的冲刷,也就那样了。 前言
使用std::optional替换absl::optional需要包含的头文件
04-04
下面我们将详细介绍如何进行这种替换,并探讨相关的头文件和使用方法。 首先,要使用`std::optional`,你需要包含`<optional>`头文件: ```cpp #include <optional> ``` 而在使用`absl::optional`时,你需要包含`...
Optional使用
囚徒之困
05-03 2125
Optional使用介绍
Optional使用详解
最新发布
qq_59299076的博客
09-06 926
如上图所示就是Optional所拥有的方法,接下来我将会对其一一进行讲解。​ java8的新特性Optional的内容大概就这些,希望对你处理空值有所帮助,并且Optional的源码也很简单,推荐大家都去看看学习下加深印象。
Optional类快速上手
weixin_54232666的博客
04-16 518
看不懂公司代码?想要彻底搞懂Java8新特性Optional类的使用,这一篇就够了!
Optional 使用方法
stepMore的博客
09-14 1万+
Java8引入了Optional类来解决NullPointerException的问题。学习好Optional使用方式,使我们的代码更加健壮。 示例类: class Insurance { private String name; public String getName() { return name; } } class Car { private Optional<Insurance> insurance; public Opti
Optional 使用方法详解
怪咖@的博客
05-16 4万+
Optional的作用是什么?他都有哪些方法?阿里规范点名说尽量用Optional来避免空指针,那么什么场景用Optional?本篇文章围绕这三点来进行讲解。
使用Optional解决空指针问题共2页.pdf.zip
10-31
本文将详细探讨如何使用`Optional`来避免空指针问题。 `Optional`类并不是一个必需的类型,而是作为一个辅助工具,用来表示一个值可能存在也可能不存在。它通过提供一套链式调用的方法,让开发者在检查null值时能够...
java8中forkjoin和optional框架使用
08-28
下面我们将详细介绍这两个框架的使用和原理。 Fork/Join 框架 Fork/Join 框架是 Java 7 中引入的一种新的并发编程模型,它可以将一个大任务拆分成多个小任务,并将这些小任务分配给多个线程来执行,然后将这些小...
关于Java8新特性Optional类的详细解读.rar
07-10
创建一个Optional对象时,通常不直接new Optional(value),而是使用Optional.ofNullable(T value)或者Optional.empty()。ofNullable()方法接受一个可能为null的值,如果值为null,则返回一个空的Optional;empty()...
还在用if(obj!=null)做非空判断,带你快速上手Optional
08-19
下面我们将对 Optional 的基本概念、使用方法、优点等进行详细的介绍。 Optional 的基本概念 Optional 是一个容器,用于表示可能包含空值的对象引用。它提供了一种方式来明确地处理空值,避免了 ...
关于Optional使用
qq_41228643的博客
04-27 569
**简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 null!=obj 这样的方式存在的判断,从而令人头疼导致NPE(Null Pointer Exception 空指针异常),同时Optional的存在可以让代码更加简单,可读性跟高,代码写起来更高效.** //常规判断: //对象 人 //属性有 name,age Person person=new Person(); if (null==person){ return "person为null
Optional 详细用法
qq_19891197的博客
11-19 9970
Optional 详细用法
JDK8新特性:使用Optional避免null导致的NullPointerException
热门推荐
aty
01-15 11万+
Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
Optional使用
Jiangbohao_的博客
11-25 422
一.简介 Optional 是一个对象容器,具有以下两个特点: 提示用户要注意该对象有可能为null 简化if else代码 二. 方法介绍 创建: Optional.empty(): 创建一个空的 Optional 实例 Optional.of(T t):创建一个 Optional 实例,当 t为null时抛出异常 Optional.ofNullable(T t):创建一个 Optional 实例,但当 t为null时不会抛出异常,而是返回一个空的实例 获取: get():获取optional实例
写文章

热门文章

  • MyBatis Generator使用方法(详细) 16120
  • 2022年java开发面试题整理合集大全 3589
  • stream流的详细操作 2979
  • Spring cloud config配置中心、RabbitMQ、 配置中心+Bus配置刷新的配置 2952
  • SpringCloud中Sleuth+zipkin链路跟踪、订单的流量削峰的配置 2034

分类专栏

  • 工作 10篇
  • 配置大全 3篇
  • Spring  Cloud 7篇
  • 面试 2篇
  • Swagger 1篇
  • 大数据 3篇
  • elasticsearch 1篇
  • 分布式 3篇
  • linux 1篇
  • 微服务笔记大全 7篇
  • 前端 1篇

最新评论

  • 微服务笔记大全1

    程序猿阿杰: 不好意思

  • 微服务笔记大全1

    deikjet: 第二部分里面好多nacos打成了nocas哈哈哈哈

  • MyBatis Generator使用方法(详细)

    程序猿阿杰: 是这样的,因为他生成的是一个表对应一个实体类,mapper,xml等

  • MyBatis Generator使用方法(详细)

    帅大大的架构之路: 大佬,指定table那里,如果要生成几十张表,需要一个个写上去吗

  • stream流的详细操作

    程序猿阿杰: 好好学,这个工作会用到

最新文章

  • ExtJS生成日历组件
  • RedisTemplate的操作和用法
  • redis的操作(Linux系统中)
2024年1篇
2023年3篇
2022年17篇
2021年15篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家卡通雕塑小丑玻璃钢雕塑夏日商场美陈做什么好看深圳兵马俑玻璃钢雕塑山西玻璃钢佛像雕塑玻璃钢鳄鱼雕塑玻璃钢大型雕塑摆件玻璃钢雕塑贴金箔中国红色玻璃钢雕塑天津人物玻璃钢雕塑价格商场美陈装饰雕塑玻璃钢花盆工厂价位图木舒克玻璃钢雕塑造型贴金附近不锈钢玻璃钢卡通雕塑生产宁波定制玻璃钢雕塑设计楚雄市玻璃钢雕塑加工玻璃钢交警雕塑春季商场化妆品美陈通化沈阳玻璃钢花盆陕西 玻璃钢花盆厂上海市玻璃钢雕塑上色北京高质量玻璃钢雕塑销售厂家唐山玻璃钢广场雕塑定制上海开业商场美陈哪里有晋江玻璃钢花盆厂家批发玻璃钢雕塑订制订金佛像玻璃钢雕塑安装淄博玻璃钢仿铜雕塑花乡那卖玻璃钢花盆上海公园玻璃钢雕塑生产厂家吴川玻璃钢牛雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化