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的

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位? 本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。 阅读详情

相关推荐

Unity2019编译器下使用Ump无错误,打包exe不播放 或 将exe文件在其他电脑下运行不播放

一、unity编译器下使用UMP可以播放视频,打包后查看debug 出现错误 UnloadTime: 1.070900 ms Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl.dll Fa.

qq_42345116的博客 4700

Optional

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

ldk99_的博客 400

AWR1642+DCA1000EVM 不使用mmWave Studio软件采集原始ADC数据 Timeout问题汇总

DCA1000 EVM Timeout问题汇总

Jesy_Hsu的博客 1476

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

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证

基于Xilinx的I2S Receiver IP核和I2S Transmitter IP核音频验证 文章目录前言一、工程构架二、Xilinx IP的配置1.I2S Transmitter IP配置:2.I2S Receiver IP配置:3.WM8960的配置:总结 前言 本实验基于Xilinx ZU4EV平台,也适用于ZYNQ平台。音频验证完成,记录调过程。 ①Xilinx 音频IP只支持主模式,左对齐或右对齐方式,16bit或24bit字长。 ②WM8960器件作为从模式;24bit字长;数据传输格

weixin_45637597的博客 6815

等时替代模型( Isotemporal Substitution Model)

文献阅读:Associations of sedentary time and physical activity with adverse health conditions: Outcome-wide analyses using isotemporal substitution model(该论文于2022年4月28日发表在柳叶刀子刊 EClinicalMedicine 上)

姚巨龙的博客 1万+

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

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 464

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

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

独行侠梦的博客 7225

精密加工零件自动报价智能体设计与实现

摘要 本文设计并实现了一个精密加工零件自动报价智能体系统。该系统通过计算机视觉和几何分析技术,自动读取3D图纸(STEP/STL格式),提取影响加工成本的几何特征,实现精准报价。系统采用模块化设计,包含3D模型解析、特征提取、成本计算和报价生成四个核心模块。关键技术包括:使用PythonOCC处理STEP文件,Trimesh处理STL网格;实现体积、表面积、包围盒等基础几何量计算;开发特征提取算法识别复杂曲面、深孔等加工难点;基于规则库进行可加工性评分和成本估算。相比传统人工报价方式,该系统能显著提高报价效

AI的内部世界的博客 112

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8815

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

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

weixin_39859715的博客 469

【同等学力】01-逻辑符号表达

F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。

super_mochi1 1880

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

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

轻狂书生FS的博客 1859

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

weixin_39943547的博客 808

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java 8 Optional的正确姿势

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

等风的帆 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java8 之 Optional 详解

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

流华追梦的专栏 4890

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、付费专栏及课程。

余额充值