if else 太多?看我用 Java 8 轻松干掉!
2021/5/25 14:24:35
本文主要是介绍if else 太多?看我用 Java 8 轻松干掉!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
之前我用 Java 8 写了一段逻辑,就是类似下面这样的例子:
/* * 来源公众号:Java技术栈 */ if(xxxOrder != null){ if(xxxOrder.getXxxShippingInfo() != null){ if(xxxOrder.getXxxShippingInfo().getXxxShipmentDetails() != null){ if(xxxOrder.getXxxShippingInfo().getXxxShipmentDetails().getXxxTrackingInfo() != null){ ... } } } }
要逐个判空再取最后的不为空的值,这样写,如果 if
多了就极不优雅,于是,我利用了 Java 8 的 Optional.map
方法干掉了层层 if
,同事直呼看不懂,没看过的可以点击这里进行阅读。
最近又来了个奇怪的需求,大概的逻辑是这样的,有一个参数,如果该值为空,就依次取几个备用参数的值,如果几个备用的参数都为空,最后取默认值。
如:取 info 的值,如果 info 为空,就依次取 info1, info2, info3, info4 的值,如果都为空,就取系统默认值。
感觉就是和上次的场景完全相反,上次是依次判断不为空取最后的值,这个是取第一个不为空的值。
实现方案1
用 if/else
来实现:
/* * 来源公众号:Java技术栈 */ String info = xx.getInfo(); if (info == null) { info = xx.getInfo1(); if (info == null) { info = xx.getInfo2(); if (info == null) { info = xx.getInfo3(); if (info == null) { info = xx.getInfo4(); if (info == null) { info = "Java技术栈(默认)"; } } } } }
我敢打赌,肯定会有人会这么写,这样写很不优雅,如果备用值有很多个,那不是要疯了。。
实现方案2
当然,还有这样的写法:
/* * 来源公众号:Java技术栈 */ String info = null; if (xx.getInfo() != null) { info = xx.getInfo(); } else if (xx.getInfo1() != null) { info = xx.getInfo1(); } else if (xx.getInfo2() != null) { info = xx.getInfo2(); } else if (xx.getInfo3() != null) { info = xx.getInfo3(); } else if (xx.getInfo4() != null) { info = xx.getInfo4(); } else { info = "Java技术栈"; }
这个写法要比第一个要好点,也是用的比较多的写法。
实现方案3(推荐)
上面那个也是层层 if
还有 else if
,也不是很优雅,在很多书中也不推荐这么写,而推荐这么写:
/* * 来源公众号:Java技术栈 */ public String getInfo(XX xx) if (xx.getInfo() != null) { return xx.getInfo(); } if (xx.getInfo1() != null) { return xx.getInfo1(); } if (xx.getInfo2() != null) { return xx.getInfo2(); } if (xx.getInfo3() != null) { return xx.getInfo3(); } if (xx.getInfo4() != null) { return xx.getInfo4; } return "Java技术栈"; }
这样写稍微聪明点,也是推荐的写法,单独抽取一个方法,依次返回,这样可以避免过多的 if/else
而导致潜在的逻辑混乱的可能。
实现方案4(终极推荐)
即使这样,感觉代码还是不是很好看,if
判断太多了,下面看栈长我如何用 Java 8 干掉这些 if/else
吧!
Java 8 方案示例:
/* * 来源公众号:Java技术栈 */ List<String> list = new ArrayList<>(Arrays.asList(info, info1, info2, info3, info4, "Java技术栈(默认)")); list.removeIf(StringUtils::isBlank); String result = list.get(0);
3行搞定,爽!!!
是怎样实现的呢?我们逐行展开分析下:
- 依次用每个参数构建一个List
- 移除所有为空的参数
- 找出第一个不为空的参数
利用 Java 8 新增的 removeIf
方法巧妙的干掉了 if/else
,并且可以使用 Lambda
表达式或者方法引用,是不是很优雅呢?
本来想利用 Stream
一行搞定的,无奈 Stream
不能接收 null
参数,不然报指针异常。
关于这段 if/else
逻辑你还知道别的改进方式吗?欢迎留言分享!
本次的分享就到这里了,希望对大家有用。觉得不错,在看、转发分享一下哦~
关注Java技术栈微信公众号,栈长将继续分享好玩的 Java 技术,公众号第一时间推送,关注公众号还可以在菜单中获取历史 Java 教程,都是干货。
近期热文推荐:
1.Java 15 正式发布, 14 个新特性,刷新你的认知!!
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
4.吊打 Tomcat ,Undertow 性能很炸!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
这篇关于if else 太多?看我用 Java 8 轻松干掉!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南