网易首页 > 网易号 > 正文 申请入驻

JDK8 的判空就是这么爽!

0
分享至

阿粉相信大家肯定所有的开发者都对Java8里面的所有的东西都感兴趣,虽然目前的 JDK 已经更新到 JDK17 了,但是阿粉相信,现在很多公司使用的还都是 JDK8 甚至是 JDK7,但是,就算是有些公司已经升级到 JDK8 但是对于 JDK8 里面的一些东西的使用,却没有使用的淋漓尽致。阿粉今天就给大家放出几个 JDK8 里面比较好用的。

JDK8

大家都是知道 JDK8 就开始使用 Lambda 表达式,但是很多不管是在教程上还是在其他的书籍上,都没有说在实际开发的时候去使用上这个 Lambda 表达式,而且包括 JDK8 里面的一些新的类,也都没有引入,所以阿粉在这里想要给大家安利一波使用方面的知识。

Optional类

这个类对于大家来说,是一个非常重要的类,不知道大家有没有被 java.lang.NullPointerException 疯狂的折磨过,不管是新人开发还是老开发,遇到这个问题的时候,都是头大的很,因为我们要在代码里面去疯狂的判断是否是null,如果不是 null 需要怎么处理,如果是 null 需要怎么处理,反正就是你要是想解决 java.lang.NullPointerException 这个问题,就免不了去加一些判断条件,而 Optional 这个类,则是帮你优雅的处理 null 的问题。

我们先看一组 Java7 中的一些判断空的实现:


User user = usersMapper.selectUserById(userId);
String userName = user.getUserName();
if(user!= null){
if(userName != null && !userName.isEmpty()){


阿粉相信大家一定都写过这个样子的代码,因为我们不知道SQL查询出来的数据中是否包含了我们的 Users 对象,如果要是 Users 对象,那么就会无情的出现 java.lang.NullPointerException 这个空指针异常,这时候就很尴尬了,老开发一脸懵逼,我竟然还有的地方没有验证?

但是验证了之后,你就会发现代码量是非常的大,而且有点不太美观,我们再来对比一下 JDK8 中,给我们提供的方法来进行验证的方式。

User user = usersMapper.selectUserById(userId);
Optional.ofNullable(user)
.map(User::getUserName)
.ifPresent(userName->{

大家看这种链式编程,ofNullable() 方法给我们提供了判断 user 是不是空,并且去校验 userName,如果存在,然后执行下面的逻辑,相比较 JDK7 的内容,相信大家看起来的话肯定是没有 JDK7 中的表现的那么的明显,但是大家看代码是不是发现已经被处理的妥妥的了。而且非常的优雅。

相信大家肯定都看过一些教程,上面会写到:

User user = usersMapper.selectUserById(userId);
Optional userOptional = Optional.ofNullable(user);
Optional str = userOptional.map(User::getUserName);

但是相对于代码的可读性来说,我们肯定还是希望使用 JDK7 上面的判断来进行判断,但是这种 JDK8 的链式编程,在一定程度上减少了代码量,并且开发效率也会相对应的提升。

如果大家不信,我们可以来运行一下我们的代码,然后看一下效果。

Optional.ofNullable(user)
.map(User::getUserName)
.ifPresent(userName->{
System.out.println("用户UserName不为空");

大家看,是不是就出现了我们想要的结果,一个判断 null 的操作,瞬间变得高大上了,而且代码的逼格瞬间上升一个档次。

对于 Optional 类,在 Java8 实战中给出了很多的方法,阿粉也是给大家摘取了一下,做了个总结,

  • ofNullable 方法 :将指定值用Optional封装之后返回,如果该值为null,则返回一个空的Optional对象

  • empty 方法 :返回一个空的Optional实例

  • filter 方法 :如果值存在并且满足提供的谓词,就返回包含该值的Optional对象;否则返回一个空的 Optional对象

  • flatMap 方法 :如果值存在,就对该值执行提供的mapping函数调用,返回一个Optional类型的值,否则就返 回一个空的Optional对象

  • get 方法 :如果该值存在,将该值用Optional封装返回,否则抛出一个NoSuchElementException异常

  • ifPresent 方法 :如果值存在,就执行使用该值的方法调用,否则什么也不做

  • isPresent 方法 :如果值存在就返回true,否则返回false

  • map 方法 :如果值存在,就对该值执行提供的mapping函数调用

  • of 方法 :将指定值用Optional封装之后返回,如果该值为null,则抛出一个NullPointerException异常

  • orElse 方法:如果有值则将其返回,否则返回一个默认值

  • orElseGet 方法 :如果有值则将其返回,否则返回一个由指定的Supplier接口生成的值

  • orElseThrow 方法 :如果有值则将其返回,否则抛出一个由指定的Supplier接口生成的异常

大家看这些方法是不是都有很多相似的,比如 map,flatMap,还有orElse,orElseGet,orElseThrow 方法

map 和 flatMap 比较:

这两个都是做 转换值 的操作,区别就是入参的类型不是一样的,map的入参是Function mapper而 flatMap 入参则是Function > mapper

入参的不同也就导致了他们获取返回值也是不同的,map中获取的返回值自动被Optional包装,flatMap中返回值保持不变,但必须是Optional类型。

这么一看总是感觉不太对的样子,我们去源码里面看看是什么样子的。

map:
public Optional map(Function mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));

flatMap:
public Optional flatMap(Function> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));

map 方法参数中的函数 mapper 输出的是值,然后 map 方法会使用 Optional.ofNullable 将其包装为 Optional;而 flatMap 要求参数中的函数 mapper 输出的就是 Optional。

一个是比较聪明的,另外一个就相对来说不是那么聪明了,人家会自己包装呀,是不是?

同样的比较还有 orElse,orElseGet,orElseThrow 但是这个阿粉就不再给大家絮叨了,因为上面的方法解释上都很明显的能看到了。

Lambda 表达式

Lambda 表达式实际上就是相当于是一个匿名内部类,他就是让我们开发的人把函数当成参数传递给某个方法,然后把代码当做数据去处理。

阿粉相信大家肯定都了解这块,就比如说下面的代码对比:

Java7:
List stringList = Arrays.asList("1", "2", "3");
for (String st:stringList) {
System.out.println(st);
Java8:
Arrays.asList("1", "2", "3").forEach((String st)->{
System.out.println(st);

同样的一个循环,我们肯定想用第二种写法不是么?

Java8 实际上在从发布开始,很多公司都在用,但是也有很多人依旧选择是 Java7,因为不想改变自己的学习风格,阿粉相信大家如果是一个决心在开发领域一直做下去的人,那么肯定会保持一个不断学习的心,所以,你是这样的人么?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
亲人遇交通事故受伤,5次住院治疗后家属坚持出院,结果出院次日死亡,家属未做尸检便将其遗体火化,保险公司:死因不明拒赔……法院判了

亲人遇交通事故受伤,5次住院治疗后家属坚持出院,结果出院次日死亡,家属未做尸检便将其遗体火化,保险公司:死因不明拒赔……法院判了

都市快报橙柿互动
2026-08-02 12:19:17
扫黑大升级!国家在下一盘更大的棋——看懂的人已经开始布局了

扫黑大升级!国家在下一盘更大的棋——看懂的人已经开始布局了

天气观察站
2026-08-02 13:38:57
哈马斯交枪了,接下来是真主党,再接下来就该轮到伊朗革命卫队了

哈马斯交枪了,接下来是真主党,再接下来就该轮到伊朗革命卫队了

壹家言
2026-08-01 09:03:10
奉陪到底!中方强势取消3500亿美芯订单,马斯克:这只是个开始

奉陪到底!中方强势取消3500亿美芯订单,马斯克:这只是个开始

荒野科技
2026-08-02 10:09:15
比亚迪员工怒斥食堂太黑心,垃圾饭菜15元,质问老板百年之后不怕下地狱吗?评论区一片吐槽!

比亚迪员工怒斥食堂太黑心,垃圾饭菜15元,质问老板百年之后不怕下地狱吗?评论区一片吐槽!

谭谈社会
2026-08-01 19:58:36
泰总理:芭提雅俄公民遇害案是“泰国巨大耻辱”

泰总理:芭提雅俄公民遇害案是“泰国巨大耻辱”

参考消息
2026-08-02 15:54:21
6万难民抢滩登陆西班牙!57人惨死边境,警察看傻眼军队救场,欧洲炸锅

6万难民抢滩登陆西班牙!57人惨死边境,警察看傻眼军队救场,欧洲炸锅

可达鸭面面观
2026-08-01 14:37:27
斯卢茨基遭惩罚!30分钟连丢2球,媒体人集体开炮:还不如唐田

斯卢茨基遭惩罚!30分钟连丢2球,媒体人集体开炮:还不如唐田

奥拜尔
2026-08-02 20:17:16
乌克兰不停手,第14个“野莓”仓库被击中,损失该谁来赔偿?

乌克兰不停手,第14个“野莓”仓库被击中,损失该谁来赔偿?

山河路口
2026-08-02 18:14:16
用这种杯子喝水的人“天塌了”!全是细菌!很多人喜欢,赶快自查

用这种杯子喝水的人“天塌了”!全是细菌!很多人喜欢,赶快自查

南方都市报
2026-08-02 18:19:20
两年顶薪!辽宁男篮与付豪完成续约 已效力6年夺3冠1亚

两年顶薪!辽宁男篮与付豪完成续约 已效力6年夺3冠1亚

醉卧浮生
2026-08-02 20:25:35
青岛海牛危险了!德比战丢球,彭欣力教科书反越位,郑智不留情面

青岛海牛危险了!德比战丢球,彭欣力教科书反越位,郑智不留情面

奥拜尔
2026-08-02 18:49:45
河南西平县发生重大刑事案件,官方通报

河南西平县发生重大刑事案件,官方通报

界面新闻
2026-08-02 20:36:54
43.5万 !丰田新车正式上市,价格有点猛啊

43.5万 !丰田新车正式上市,价格有点猛啊

科技堡垒
2026-08-02 11:22:30
西班牙休达“丧尸围城”,欧洲的“圣母婊们”求仁得仁了

西班牙休达“丧尸围城”,欧洲的“圣母婊们”求仁得仁了

百味朱砂
2026-08-01 14:55:21
再往前,就打下来!菲律宾军机低飞闯黄岩岛空域,逼到四十千米

再往前,就打下来!菲律宾军机低飞闯黄岩岛空域,逼到四十千米

叶葉夜
2026-08-02 16:29:14
非必要不做肠镜?医生提醒:只要做过肠镜,这7件事一定要多注意

非必要不做肠镜?医生提醒:只要做过肠镜,这7件事一定要多注意

医学科普汇
2026-08-02 13:25:11
林青霞在施南生追思会上发言:我和徐克每天24小时轮流地守候

林青霞在施南生追思会上发言:我和徐克每天24小时轮流地守候

韩小娱
2026-08-02 16:44:51
硬刚小米!华为新车官宣:8月5日,正式开订!

硬刚小米!华为新车官宣:8月5日,正式开订!

科技堡垒
2026-08-02 11:15:47
女子揭秘“饿两天定律”,体重狂掉33斤,瘦到100斤

女子揭秘“饿两天定律”,体重狂掉33斤,瘦到100斤

解说阿洎
2026-08-02 14:28:56
2026-08-02 22:04:49
中国尊下的打工仔
中国尊下的打工仔
不定时更新Java知识
26文章数 168关注度
往期回顾 全部

科技要闻

零跑月销10万破纪录!比亚迪奇瑞海外卖爆

头条要闻

女子花10万请明星带货仅卖1单 3公司"坑位费"收2600万

头条要闻

女子花10万请明星带货仅卖1单 3公司"坑位费"收2600万

体育要闻

常规赛MVP可以衡量常规赛成就吗?

娱乐要闻

徐克和多位港星送别施南生

财经要闻

长鑫科技四万亿市值背后的资本与周期

汽车要闻

历史性里程碑时刻 零跑7月交付达101267台

态度原创

本地
数码
时尚
艺术
公开课

本地新闻

神仙也“蓉”漂,哪吒与八仙,皆是成都出品!

数码要闻

DIY主机涨价持续施压 上半年中国显示器线上市场量跌10%

东野宇宙,未完待续

艺术要闻

自然与艺术|奥杜邦《美洲鸟类》

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版