首页 > 其他分享 >面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!

面试官:Lambda 表达式中的 forEach 如何提前终止?这次被问倒了!

时间:2023-02-15 09:55:22浏览次数:44  
标签:面试官 循环体 return 循环 forEach 终止 Java Lambda

情景展示

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

执行结果如下:

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

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

推荐一个开源免费的 Spring Boot 最全教程:

https://github.com/javastacks/spring-boot-best-practice

原因分析

我们知道,在普通for循环里面,想要提前结束(终止)循环体使用"break";

结束本轮循环,进行下一轮循环使用"continue";

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

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

我们来看看源码:

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

java8的forEach()和JavaScript的forEach()用法是何其的相似,感兴趣的可以去了解下(在文末)。

Java不是万能的,不要再吐槽它垃圾了。

解决方案

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

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

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

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

for循环可以提前终止。

方式一:break

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

方案二:抛出异常

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

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

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

这样,就完美了。

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

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

来源:https://blog.csdn.net/weixin_39597399

近期热文推荐:

1.1,000+ 道 Java面试题及答案整理(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

标签:面试官,循环体,return,循环,forEach,终止,Java,Lambda
From: https://www.cnblogs.com/javastack/p/17121716.html

相关文章

  • Lambda表达式
    Lambda表达式PublicclassTestLambda01{psvm{ILambdalambda=()->sout("!!!");lambda.lambda();}interfaceILambda{......
  • AWS Lambda 查询 Redshift Serverless
    在应用程序中,经常在Lambda中调用redshiftdataapi去查询redshiftserverless的数据,以下描述具体实现过程:1:给Lambda创建一个执行Lambda的IAMRole,并具有访问redshift......
  • 五分钟重温C# 委托,匿名方法,Lambda,泛型委托,表达式树
    五分钟重温C#委托,匿名方法,Lambda,泛型委托,表达式树翔星有10年+工作经验,高级软件工程师,可以解决各种问题​关注 1人赞同了该文章第一分钟:委托有......
  • 通过Lambda优化 AWS EMR 成本
    背景随着AWSEMR服务用户越来越多,持续运行的AWSEMR在成本优化方面会有较多限制,本文会提供一些特定情况下AWSEMR平台成本优化的一些方法和思路。本文主要包含“控制实例组......
  • Lambda表达式与Stream API
    Lambda表达式与StreamAPI​​1、Lambda表达式​​​​1.1Lambda表达式语法​​​​1.2案例:实现Comparator接口​​​​1.3类型推断​​​​1.4Lambda类型推断​​​​2......
  • forEach和map的区别
    相同点都是循环遍历数组中的每一项forEach和map方法里每次执行匿名函数都支持3个参数,参数分别是item(当前每一项)、index(索引值)、arr(原数组)匿名函数中的this都是指向win......
  • 在AWS云服务器里用lambda操作rds的mysql数据库
    yuminstall-ymysql  #在EC2的服务器里安装mysql主要是在服务器里做连接mysql用(mysql -hrds-instance-endpoint -uadmin-P3306-p12345678)pip3install--......
  • java中的lambda表达式
    java中的lambda表达式历史背景到目前为止,在Java中传递一个代码段并不容易,不能直接传递代码段,Java是一种面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法......
  • JSTL_常用标签_foreach与JSTL_练习
    JSTL_常用标签_foreachforeach:相当于Java代码的for1.完成重复的操作for(inti=0;i<10;i++){}属性:b......
  • 778~779 JSTL常用标签 choose,foreach
    2.choose:相当于java代码的switch语句1.使用choose标签声明                 相当于switch声明2.使用when标签做判断  ......