java8 optional那些事

【Java必修课】Java 8中map()与flatMap()在Optional和Stream中的区别 在Java 8中,我们可以在Optional和Stream经常看到map()和flatMap()这两个方法,这两个方法是针对函数式特性引入的,两者功能上看似相近,但其实还是有很大区别的。让我们来了解一下吧。 Optional中的比较 我们会经常在Optional中使用到map()做对象转化,如下把一个整数转化成它的两倍: Optional<Integer> num = O... 阅读详情

java8的Optional让很多小伙伴减少了很多NullPointerException,虽然代码比较优雅,短小精干,但是语法比较晦涩难懂,故整理如下。

1:调用他人接口时,再也不用各种判断了

传统情况下,我们通过http工具或者使用微服务feign的方式调用其他接口,总是担心别人的接口返回各种奇怪的东西,甚至还有在字段上“缺斤少两”的情况。

先判断返回code是不是成功,然后判断数据存不存在,一来二去,写了很多冗余代码,java8 的Optional 则可以优雅的处理上述情况。
预期的返回结果:

{
	"code": "200",
	"msg": "成功执行",
	"data": []
}

我们的代码可以写成如下这样

//模拟调用外部接口
Map<String, Object> mymap = serviceImpl.queryAlarmList(indexIds);
//即使map为空也能正常返回,配合map直接映射数据值
return Optional.ofNullable(mymap).map(r -> r.get("data")).orElseGet(ArrayList::new);

上面的逻辑为:如果mymap不为空,则执行mymap.get("data"),否则返回 new ArrayList()。

2. 使用Optional包装返回值

采用Optional包装的返回值,让别人知道你的方法可能会返回空值,相当于声明一个注释,如果直接调用get()拿值,可能会空指针.

 public Optional<Student> getStudent(){
        //...
        Student student= null;
        return Optional.ofNullable(student);
    }

3 可以少写判断代码

对象层层嵌套,为了逻辑严谨必须要进行空判断,如果不层层判断,有可能在某一层上收获一个空指针,而Optional优雅的帮我们处理掉这样的逻辑。

通常的代码写法:

   School school = null;
        if( null != school ) {
            Clazz clazz = school.getClazz();
            if(clazz != null) {
                Student student = clazz.getStudent();
                if(student != null) {
                    String name = student.getName();
                    if(name == null || "".equals(name)){
                        name = "风清扬来了";
                    }
                }
            }
        }

而用optional写,则代码就少多了,如下所示:

 String name = Optional.ofNullable(school)
                .map(School::getClazz)
                .map(Clazz::getStudent)
                .map(Student::getName)
                .orElse("风清扬来了");

注意:这里的map是说明调用哪个方法,而不是map呀。

4)对象增强

包装上Optional的对象,可以灵活的使用map(),filter()等方法进行增强,大大简化代码。

People people = null;
Optional.ofNullable(people)
        //...可以有无穷个中间操作
        .filter(p->p.getName().startsWith("风清扬来了"))
        .map(p->p.getMoney())
        //终端操作,消费掉
        .ifPresent(System.out::print);

参考文档:

1.我是如何优雅的使用Optional的

如何使用AutoDl平台跑自己的模型(纯干货,步骤很详细) 记录我使用AutoDL云服务器来跑自己模型的全过程 阅读详情

相关推荐

以太网传输硬件设计大全

1.网线的介绍RJ45由插头和插做组成,也就是我们常说的网口和网线。RJ45 网线插头又称水晶头,共有八芯做成。RJ45网络传输线分为直通线、交叉线和全反线。直通线用于异种网络设备之间的互连,例如,计算机与交换机。交叉线用于同种网络设备之间的互连,例如,计算机与计算机。全反线用于超级终端与网络设备的控制物理接口之间的连接。下面将介绍一下各线的作用和区别。1.直通线:又叫正线或标准线,两端采用568B做线标准,注意两端都是同样的线序且一一对应。直通线是应用最广泛,现在最常用的线。

weixin_45365488的博客 6750

Optional

程序中对"空",如空数组、空集合的体现形式可能是null或emplityList。如果是null,在使用时就需要我们进行null判断,防止抛空指针异常。常用的就是if else判断,但是如果存在多个if else 且它们之间存在着嵌套关系,代码写起来就复杂。这时候就可以使用Optonal的链式编程来解决。 api介绍 Modifier and Type Method and Description static <T> Optional<T> empt

ldk99_的博客 400

别再浪费HDRI了!D5渲染器环境光设置避坑指南(附天空球调试参数)

本文深入解析D5渲染器中HDRI环境光的高阶调试技巧,揭示90%渲染师常犯的错误认知。通过参数联动黄金法则、特殊材质应对方案及动态场景优化策略,帮助用户精准控制光子能量分布,实现建筑玻璃反射云层过渡等专业级效果。附赠天空球调试参数和商业项目验证案例,助您彻底释放HDRI潜力。

weixin_29216049的博客 495

Java8新特性-Optional

使用案例 @Test public void testIsPresent() { Optional optional = Optional.of(“thinkwon”); Optional optional1 = Optional.ofNullable(null); System.out.println(optional.isPresent()); System.out.println(optional1.isPresent()); } 输出结果 true false 注意:下面例子的用法不但没有减少nul

qdwd888的博客 668

保姆级教程:用Wireshark抓包分析10M汽车以太网PLCA轮询机制(附pcap文件)

本文详细介绍了10M汽车以太网PLCA轮询机制的抓包分析与性能优化方法。通过Wireshark实战教程,解析PLCA协议的时分多址特性、总线型拓扑结构及带宽优化策略,帮助工程师提升车内网络的可靠性和实时性。附赠pcap文件供实践参考。

wdx01234567的博客 240

⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力

【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」

davidkorhenn的博客 1928

java8:Optional.ofNullable的使用

-- Optional类是Java8为了解决null值判断问题,使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPointerException)。 示例: public static void main(String[] args) { TestDemo testDemo = new TestDemo(); getCount(testDemo); } private static void getCount(TestDemo t.

FengLiu0077的博客 4575

基于 Simulink 的 PV 光伏阵列功率发电系统仿真 Matlab

其中直流侧电压需要与光伏电池组件匹配,交流侧电压则需要与配电系统匹配,开关频率一般在几千赫兹左右,需要保证在一定范围内。根据实际需求,我们还可以通过增加负载,以及调节光照强度等方式,模拟不同的情况下系统的响应和性能表现。经过设置参数和各部分之间的传递和控制后,我们可以开始进行模型仿真。在仿真前,我们需要确定仿真时间和步长,并对整体模型进行编译。在建立完毕整体模型框架后,我们需要为每个组件设置参数,并进行传递和控制。首先,我们需要建立一个整体的模型框架,包括各个组件之间的关系和控制器的作用。

学习使你进步。 1129

java8_我是如何优雅的使用Optional的

还在防御式的调用别人的接口吗? 还在为多层嵌套对象而烦恼吗? 拥抱java8的Optional吧!众所周知,Optional让很多小伙伴减少了很多NullPointerException,这里不再探讨其用法,而是分享一些我遇到的真实案例。 1)调用他人接口时,再也不用各种判断了 传统情况下,我们通过http工具或者使用微服务feign的方式调用其他接口,总是担心别人的接口返回各种奇怪的东西...

独行侠梦的博客 7225

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

宁波阿成的博客 198

快速生成2D卡通人物的AI工具:开启Live2D角色创作的新时代

随着这一创新工具的推出,我们正见证着Live2D角色创作进入了一个全新的阶段。它不仅极大地简化了角色设计的过程,也为广大创作者提供了一种全新的表达方式。对于那些渴望将脑海中的构思迅速转化为现实的人来说,这无疑是一大福音。现在就访问项目主页,开始探索无限可能吧!t=O83A项目主页https://human3daigc.github.io/Textoon_webpage/

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 4836

optional用法_Java8-关于Optional的那些事

java8出来也有一段时间了,不知大家用得还顺手否?如果已经习惯于使用Lambda表达式和Stream流的人一定会经常发现一个特殊的对象:Optional类。今天我要聊的内容都跟Optional这个类有关。好了,废话不多说,下面进入正题。Optional是什么对于Optional是个什么,大家不要想得太复杂。简单得说,就是Java8中新增的一个类,经常配合Stream流和Lambda表达式来使用的...

weixin_39859715的博客 469

QT 实现QStackedWidget切换页面右移动画

首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断的改变geometry;当动画结束的时候,隐藏并释放这个QLabel。以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。为了方便查看动画特效,设置了每个界面的背景图片。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 882

关于Java你不知道的那些事之Java8新特性[Optional类]

Java8新特性[Optional类]前言常用方法总结 前言 Optional类是一个容器类,代表一个值存在或者不存在,原来null表示一个值不存在,现在Optional可以更好的表达这个概念,并且可以规避空指针异常 常用方法 Optional.of:创建一个Optional实例 Optional.empty:创建一个空的Optional实例 Optional.ofNullable:若t不为null,创建optional实例,否者创建一个空实例 isPresent:判断是否包含值 orE

轻狂书生FS的博客 1859

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java8 filter 导致空指针_Java8-关于Optional的那些事

java8出来也有一段时间了,不知大家用得还顺手否?如果已经习惯于使用Lambda表达式和Stream流的人一定会经常发现一个特殊的对象:Optional类。今天我要聊的内容都跟Optional这个类有关。好了,废话不多说,下面进入正题。Optional是什么对于Optional是个什么,大家不要想得太复杂。简单得说,就是Java8中新增的一个类,经常配合Stream流和Lambda表达式来使用的...

weixin_39943547的博客 808

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java 8 Optional的正确姿势

调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。新版本的Java,比如Java 8引入了一个新的Optional类。Optional类的Javadoc描述如下: 这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回t

等风的帆 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java8 之 Optional 详解

关于使用Optional的误区有以下:1. 正确的使用创建方法,不确定是否为 null 时尽量选择 ofNullable 方法;2. 通过源代码会发现,它并没有实现 java.io.Serializable 接口,因此应避免在类属性中使用,防止意想不到的问题;3. 避免直接调用 Optional 对象的 get() 和 isPresent() 方法,尽量多使用 map()、filter()、orElse()等方法来发挥 Optional 的作用。

流华追梦的专栏 4889

java8中的Optional

Optional类主要解决空指针异常NullPointerException。 Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。 创建Optional 对象 1. 声明一个空的Optional 通过静态工厂方法Optional.empty()...

兴国-为梦想而战 1万+

Java 8 Optional 类最佳使用方法

Java8的版本,新增了Optional和Lambda表达式,Optional主要用于作为返回类型(主要解决的问题是臭名昭著的空指针异常(NullPointerException)),并将其与流(或返回可选的方法)相结合以构建连贯API。但是,有些情况可以被认为是陷阱,因为它们会降低代码的质量,甚至导致意想不到的错误。总结以下26个例子,以避免这些陷阱,关于Lambda使用方法可看我另一篇文章“点...

不坠青云 6383

Java 8 - Optional全解

文章目录在Optional出现之前经常遇到的空指针异常采用防御式减少NullPointerException (深度质疑)null-安全的第二种尝试(过多的退出语句)Optional的介绍以及API的详解Optional之flatMap,综合练习,Optional源码剖析 在Optional出现之前经常遇到的空指针异常 NullPointerException 【Person / Car / Insurance 的数据模型】 public class Person { private Car car;

小工匠 2万+

Java8中Optional详解

文章目录1.前言2.Optional介绍3.创建Optional3.1empty3.2of3.3ofNullable4.获取Optional的值4.1get()5.检查Optional是否有值5.1isPresent()5.2ifPresent()6.filter7.map8.flatMap9.返回默认值9.1orElse9.2orElseGet9.3orElseThrow10.orElse和or...

Life is for sharing的博客 3549

​Java8 Optional用法 ​

在这之后,我们想要的是存储在Optional中的值,我们可以通过get()来获取它。不过,这样做可能很有诱惑力,如果对象为空,请避免与Option.empty()返回的实例的{==}比较。最后介绍的是新的 stream() 方法,它通过把实例转换为 Stream 对象,让你从广大的 Stream API 中受益。既然 getter 方法返回 String 值的 Optional,你可以在对 User 的 Optional 对象调用 flatMap() 时,用它作为参数。反之,返回false。

2301_76234376的博客 2046

Guava Optional 和 Java 8 optional

Null  上帝创造了男人,多年之后他老人家后悔了! Null的发明人同时也是快速排序的发明人表达对Null的忏悔称:“”这是个造成上亿美元损失的错误“。

lessisawesome 的专栏 6429

Java8的Optional简介

Java8的Optional简介

duke_ding2的博客 1591

java8中optional的使用

java8中optional的使用 ​ 我们在写java代码中,尤其是业务代码,如果一个类的组合以及级联关系过多时,很容易造成空指针异常,如下面一个例子: //人 public class Person { private Car car; public Car getCar() { return car; } } //车 public class Ca...

wangzhen的博客 3187

Java 8 Optional

Optional

java大神起床啦 4万+
上一篇: 茅台识别方法
下一篇: SQL where 的元组使用
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值