Java8 lambda表达式forEach如何提前终止?


文章来源:https://c1n.cn/8USRc‍‍‍

目录

  • 情景展示

  • 原因分析

  • 解决方案

情景展示

如下图所示,我们想要终止 for 循环,使用 return。

68043c0e71e8c24336b205b4c6f34286.png

执行结果如下:

044fefcd49f5ca402ce6ac986e7c97bf.png

我们可以看到,只有赵六没被打印出来,后续的数组元素依旧被执行了。

也就是说,关键字"return",在这里执行的效果相当于普通 for 循环里的关键词"continue"。

原因分析

我们知道,在普通 for 循环里面,想要提前结束(终止)循环体使用"break";结束本轮循环,进行下一轮循环使用"continue"。

另外,在普通 for 里,如果使用"return",不仅强制结束 for 循环体,还会提前结束包含这个循环体的整个方法。

而在 Java8 中的 forEach() 中,"break"或"continue"是不被允许使用的,而 return 的意思也不是原来 return 代表的含义了。

我们来看看源码:

192ae41a42f22633d6908c4ca2232b56.png

forEach(),说到底是一个方法,而不是循环体,结束一个方法的执行用什么?当然是 return 啦。

Java8 的 forEach() 和 JavaScript 的 forEach() 用法是何其的相似,感兴趣的可以去了解下。Java 不是万能的,不要再吐槽它垃圾了。

解决方案

| 方案一:使用原始的 foreach 循环

使用过 eclipse 的老铁们应该知道,当我们输入:foreach,再按快捷键:Alt+/,就会出现 foreach 的代码提示。

bc3fb77ede13cd6ba82a0af4d9e60134.png

如上图所示,这种格式的 for 循环才是真正意义上的 foreach 循环。

在 idea 中输入,按照上述操作是不会有任何代码提示的,那如何才能在 idea 中,调出来呢?

f1ffd1851ea986a63ca406ac72872aba.png

for 循环可以提前终止。

方式一:break

23ee13a7eef203618e18327455bb161c.png

方式二:return(不推荐使用)

5bad4e129d6a03298ca278b1b90dc6dd.png

| 方案二:抛出异常

我们知道,要想结束一个方法的执行,正常的逻辑是:使用 return。

但是,在实际运行中,往往有很多不突发情况导致代码提前终止,比如:空指针异常,其实,我们也可以通过抛出假异常的方式来达到终止 forEach() 方法的目的。

4db027bf30ae4fa4881bc9e333fa182a.png

如果觉得这种方式不友好,可以再包装一层。

267379a3577ee9ffca507e828883fcbf.png

这样,就完美了。

这里,需要注意的一点是:要确保你 forEach() 方法体内不能有其它代码可能会抛出的异常与自己手动抛出并捕获的异常一样。

否则,当真正该因异常导致代码终止的时候,因为咱们手动捕获了并且没做任何处理,岂不是搬起石头砸自己的脚吗?

-------------  END  -------------
扫码免费获取600+页石杉老师原创精品文章汇总PDF



原创技术文章汇总


点个在看你最好看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值