Java8 Optional详细解读

169 篇文章 39 订阅
订阅专栏
73 篇文章 6 订阅
订阅专栏

01 概述

Optional类主要是为了解决NPENullPointerException)空指针异常而产生的,在我看来它是 Java 实现函数式编程的一种很好的方式。

举个列子看看它的简单用法:

List<Order> list = Optional.ofNullable(orderList)
            .orElseThrow(() -> new RuntimeException("集合不能为空"))
            .stream()
            .sorted(Comparator.comparing(order -> order.getSort()))
            .collect(Collectors.toList());

下面来详细讲解它的用法。

02 Optional详细用法

首先建一个学生Student实体类:

@Data
public class Student {

    /**姓名**/
    private String name;

    /**年龄**/
    private Integer age;

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

初始化学生信息:

List<Student> studentList = new ArrayList<>();
studentList.add(new Student("张三", 33));
studentList.add(new Student("李四", 40));
studentList.add(new Student("王五", 23));
studentList.add(new Student("赵六", 55));
studentList.add(new Student("陆七", 32));
studentList.add(new Student("王八", 18));

ok,现在可以正式讲解Optional的用法了。

2.1 Optional下的方法

可以看到,Optional根据提示有三个初始化方法,分别是“ofNullable”、“of”、“empty”:
在这里插入图片描述
它们的含义如下:

方法描述
of(T value)如果valuenull,那么会抛出空指针异常
ofNullable(T value)如果valuenull,那么就会手动创建一个new Optional()
empty()此方法返回此Optional类的空实例,就是不包含任何值

可以看到以上的三个方法都是初始化Optional实例而产生的,那么接下来以ofNullable(T value)方法为例子继续讲解。

2.1.1 ofNullable下的方法

可以看到使用ofNullable方法初始化完Optional实例后,有很多的方法,如下图:
在这里插入图片描述
它们的含义如下:

方法秒速
orElse(T other)当只存在时返回值,不存在返回other(可以理解为自定义值,如字符串的内容)
orElseGet(Supplier<? extends T> other)值存在返回值,值不存在返回other
orElseThrow()当前值或当值为null抛出异常
filter()主要是按条件过滤Optional实例
flatMap()streammap方法类似,都是对变量进行映射转换
map()flatMap差不多一个意思
get()返回Optional类的实例的值
ifPresent()检查实例是否存在,这种方式和null != obj没有区别
2.1.1.2 orElseThrow下的方法

orElseThrow下面的方法:
在这里插入图片描述
可以看到下面有很多的方法,其实这些方法跟stream流表达是没有其它的区别,具体stream流方式可以参考之前我写的博客:

  • 《Java8 stream流特性总结(超详细)》
  • 《Java8 stream collect Map集合》

2.2 Optional完整实例

Optional完整示例如下:

List<Student> students = Optional.ofNullable(studentList)
                .orElseThrow(() -> new RuntimeException("学生集合不能为空"))
                .stream()
                .sorted(Comparator.comparing(student -> student.getAge().intValue()))
                .collect(Collectors.toList());

它主要做了几个事情:

  1. 初始化Optional
  2. 判断集合是否为空,如果为空,则抛出异常
  3. 使用了stream流特性
  4. 根据学生年龄从小打到排序
  5. 生成排序后的集合

03 文末

本文将收录到我的 《Java专栏》,有兴趣的童鞋可以参阅下,本文完!

关于Java8新特性Optional类的详细解读.rar
07-10
总的来说,Java 8的Optional类提供了一种新的思考方式来处理可能为null的对象,它鼓励程序员更积极地处理潜在的null值,以减少编程错误。然而,使用Optional时应适度,结合具体场景选择合适的方法,以达到最佳的代码...
Java1.8 Optional简单使用
anyway8090的博客
06-04 1798
听到同事们说Optional类是Java1.8新增的类可以用来判断对象是否为null。当时感到一丝丝疑问:为了判null至于新出一个类吗?直到了学习了官方文档和实际演示了一遍,发现Optional并不是只是判null这么简单。.........
Java Optional常用示例
qq_20623849的博客
07-22 934
Java Optional
Java8的Optional简介
最新发布
duke_ding2的博客
09-17 1118
Java8的Optional简介
Java8新特性】不了解Optional类,简历上别说你懂Java8!!
冰河的专栏
05-30 8695
写在前面 最近,很多读者出去面试都在Java8上栽了跟头,事后自己分析,确实对Java8的新特性一知半解。然而,却在简历显眼的技能部分写着:熟练掌握Java8的各种新特性,能够迅速使用Java8开发高并发应用!这不,又一名读者因为写了熟练掌握Java8的新特性而被面试官虐的体无完肤!我不是说不能写,可以这样写!但是,咱在写熟练掌握Java8新特性的时候,应该静下心来好好想想自己是否真的掌握了Java8。如果自己心中对是否掌握了Java8这个问题模棱两可的话,那确实要好好静下心来为自己充电了!一定要从模棱两
Java8之Optional
嗯嗯嗯的博客
01-12 364
Optional类是为了避免空指针异常的发生 其中有三种创建Optional实例的方法,我们接下来进行分别介绍 第一种方法 ---- empty (静态方法) 源码: // 静态方法,可以使用类名直接使用。 // 返回一个空的Optional实例。 public static<T> Optional<T> empty() { @SuppressWarn...
javaList的stream操作,Optional类的使用
weixin_50746681的博客
12-18 685
1、java开发中常见的集合是list、对list的各类操作:分组、排序、转换、求和;list转stream对象、再进行集合操作、一行代码解决目的。2、java开发中常见的问题就是空指针,每次null校验都会显得非常冗余;可以用optional类接收出参,null校验一步到位。
Java8 新特性
06-17
本篇将详细解读Java8的关键新特性,包括Lambda表达式、函数式接口、Stream API、日期时间API的改进以及Optional类的引入。 首先,Lambda表达式是Java8引入的最重要的特性之一。Lambda表达式可以理解为匿名函数,它...
Java8 in Action 例子代码
02-14
以下是这些关键知识点的详细解读: 1. **Lambda表达式**:Java 8引入了Lambda表达式,这是一种简洁的编写匿名函数的方式。Lambda可以作为方法参数传递,或者被赋值给变量,使得代码更加简洁、易读。例如: ```java ...
java源码解读-java8-master:解读java8
05-19
总结来说,"java8-master"项目对Java 8的源码进行了深度解读,涵盖了函数式编程、Stream API、默认方法、Optional、日期时间API等核心知识点。通过学习这个项目,开发者可以更好地理解和利用Java 8的新特性,提升...
使用Optional更优雅地处理非空判断
Java鱼仔的博客
10-17 3207
最讨厌突然出现的空指针
Java8之Optional用法
zhuzj12345的博客
11-26 324
一 概览 Optionaljava.util包中的一部分,因此为了使用Optional,需要: import java.util.Optional; 二 创建 2.1调用empty API, 创建一个空的Optional对象: @Test public void whenCreatesEmptyOptional_thenCorrect() { Optional<Str...
java optional list 获取对象
weixin_40386082的博客
07-07 114
Java Optional List 获取对象 在日常的编程工作中,我们经常需要操作集合类对象,其中List是最常见的一种。而在处理List中的元素时,有时候我们希望能够更加优雅地处理可能为null的情况。Java提供了Optional类来处理这种情况,结合List使用,可以更加方便地获取集合中的对象。 Optional简...
Optional使用技巧
weixin_43811057的博客
04-15 1739
案例一: 如果是非集合,单纯的判断是否为空,不为空取值为空给个默认值或者初始化值 @Test void Test1(){ //有返回值的判空,如果是非集合,单纯的判断是否为空,不为空取值为空给个默认值或者初始化值 String referer =null; String s = Optional.ofNullable(referer).orElse(new String()); System.out.println("s =
Java Optional 遍历List
yht2004123的博客
03-31 569
使用javaOptional遍历List还是比较方便的,废话不多说直接上代码。
Java 8 Optional
积少成多
11-10 558
JavaList 集合三种遍历方式
Java8新特性—Optional
小薯条的博客
05-07 594
Java 8中引入了一个新的Optional类,它可以让开发人员更好地处理可能为空的值。Optional类提供了一种方式,可以更加优雅地处理null值,并在运行时避免NullPointerException异常的出现。本文将介绍Optional类的基本语法、使用场景和示例。Java 8中的Optional类为处理可能为空的值提供了一种更加优雅的方式,并在运行时避免NullPointerException异常的出现。使用Optional类可以使代码更加健壮和安全。
java8新特性
学无止境!
06-11 434
1、lambda表达式 1.1、用法举例: public class LambdaTest { public static void main(String[] args) { Hello h = ()->10; Hello1 h1 = (a,b) -> a+b; System.out.println(h.sayA()); System.out.println(h1.sayB(3,4)); } } in
XFire测试项目实践:Java 8环境下的Myeclipse开发
6. Optional类:为了解决空指针异常问题,Java 8引入了Optional类,它表示一个可能为空的值。通过使用Optional类,可以优雅地处理可能为null的场景,避免出现空指针异常。 二、XFire框架介绍 XFire是一款轻量级的...

网络领域新星创作者

3469
原创
9035
点赞
1万+
收藏
1万+
粉丝
关注
私信
写文章

热门文章

  • SQLServer安装教程(史上最详细版本) 316923
  • 246Echarts - 3D 曲面(Image Surface Sushuang) 135560
  • Layui 内置方法 - layer.msg(提示框) 124348
  • 解决OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0... 101936
  • 解决:Error response from daemon: manifest for xxx:latest not found: manifest unknown... 76404

分类专栏

  • 计划总结 2篇
  • 计划管理 10篇
  • 知识总结 5篇
  • 基础理论 1篇
  • 数学理论 26篇
  • 23种设计模式 26篇
  • 算法与数据结构 25篇
  • 网络通信 11篇
  • Linux操作系统 88篇
  • Mac操作系统 64篇
  • Maven技术 32篇
  • Git技术 16篇
  • IDEA/Vscode 40篇
  • 知识点 5篇
  • 工作/学习笔记 24篇
  • 并发编程 13篇
  • 设计模式 16篇
  • 深入理解JVM 13篇
  • 源码分析 13篇
  • 微服务技术 53篇
  • Nginx服务器 17篇
  • 互联网并发与安全 19篇
  • 分布式 46篇
  • 消息中间件 22篇
  • 数据库技术 26篇
  • 淘东电商项目 80篇
  • 微服务轮子项目 54篇
  • Vue系列教程 33篇
  • PMP知识管理系统 4篇
  • BMS项目实战记录 169篇
  • 常见错误 35篇
  • 大数据 206篇
  • Hadoop生态圈 23篇
  • 工作流任务调度 5篇
  • 数据中台 2篇
  • DataX 11篇
  • HIVE 9篇
  • HDFS 7篇
  • Flink 65篇
  • 区块链
  • 区块链理论 2篇
  • 云原生 15篇
  • golang
  • Docker 29篇
  • k8s 41篇
  • 后端
  • Java 73篇
  • Spring 14篇
  • PHP 4篇
  • RPC 6篇
  • 数据库 58篇
  • MongoDB 30篇
  • SpringMVC 22篇
  • MyBatis 38篇
  • SpringBoot 35篇
  • Shiro 12篇
  • DWR 62篇
  • SpringCloud 25篇
  • Activiti 41篇
  • MQTT 13篇
  • ActiveMQ 7篇
  • Lucene/Solr 24篇
  • Elasticsearch 17篇
  • Redis 45篇
  • MyCat 42篇
  • JavaWeb 62篇
  • 分布式电商 123篇
  • 前端 1篇
  • 前端基础 70篇
  • 公众号&小程序 19篇
  • Avalon 38篇
  • HUI 32篇
  • LayUI 20篇
  • EasyUI 65篇
  • zTree 56篇
  • JQGrid 83篇
  • Echarts 280篇
  • Vue 84篇
  • 移动端
  • Android/IOS
  • 底层
  • C语言 32篇
  • C++ 91篇
  • QT 33篇
  • MFC 19篇
  • 人工智能 6篇
  • Python 170篇
  • 爬虫 97篇
  • 机器学习 23篇
  • Django 33篇
  • Tornado 19篇
  • 运维/测试
  • 运维 32篇
  • DevOps 11篇
  • 监控告警 10篇
  • 云平台 17篇
  • 压力测试 1篇
  • 产品 2篇
  • Axure 17篇
  • 考证面试
  • PMP 81篇
  • 软考
  • TCA 21篇
  • 面试题 23篇
  • 管理 2篇
  • 研发管理 5篇
  • 管理学 8篇
  • 学习管理 3篇
  • 语言 2篇
  • 雅思 11篇
  • BEC词汇 4篇
  • 语言艺术 4篇
  • 思维哲学 2篇
  • 文化哲学 3篇
  • 感悟 1篇
  • 人生感悟 13篇
  • 生活 1篇
  • 运动周记 18篇
  • Music 32篇

最新评论

  • seatunnel-web本地安装教程(超详细)

    BaddhaLike: 我也是创建了数据源, 没有source name ;安装你的步骤走的 是哪的问题呢

  • (文章整理)追源索骥:透过源码看懂Flink核心框架的执行流程

    jinxh23: 字长 好文

  • Linux下安装MongoDB

    魣鮟: 大佬 正常安装 部署 MongoDB 的话 一般使用 什么样的 认证方式进行创建? 默认 MongoDB 的实例是不会开启 认证的,就像 MySQL 一样那种的认证方式。 使用的是 MongoDB 5版本

  • flink postgresql cdc实时同步(含pg安装配置等)

    qq_36663631: pgsql的 分区了的表 怎么flinkcdc

  • 解决Navicat报错:2013 - Lost connection to MySQL server during query

    CodingPang: 很离谱,我讲数据库部署在某东云的,后面一段时间自己好了

最新文章

  • sisi:一款通过自然语言就能搜索本地图像的工具
  • 解决高版本flink cdc connector缺少依赖的问题
  • 分享一款本地局域网文件传输工具(开源免费,支持任意端)
2024年29篇
2023年97篇
2022年206篇
2021年216篇
2020年348篇
2019年2548篇
2018年46篇

目录

目录

分类专栏

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

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

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