java if else 优化_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,同事直呼看不懂,没看过的关注Java技术栈阅读。

最近又来了个奇怪的需求,大概的逻辑是这样的,有一个参数,如果该值为空,就依次取几个备用参数的值,如果几个备用的参数都为空,最后取默认值。如:取 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 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技术栈,干货第一时间推送。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值