在Java8的foreach()中使用return/break/continue,不会跳出循环

Posted 那些年的代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java8的foreach()中使用return/break/continue,不会跳出循环相关的知识,希望对你有一定的参考价值。

今天使用lambda表达式处理集合时,发现对return、break以及continue的使用有点迷惑,于是自己动手测试了一下,才发现在使用foreach()处理集合时不能使用break和continue这两个方法,也就是说不能按照普通的for循环遍历集合时那样根据条件来中止遍历,而如果要实现在普通for循环中的效果时,可以使用return来达到,也就是说如果你在一个方法的lambda表达式中使用return时,这个方法是不会返回的,而只是执行下一次遍历,看如下的测试代码:

[java] view plain copy
  1. List<String> list = Arrays.asList("123", "45634", "7892", "abch", "sdfhrthj", "mvkd");  
  2. list.stream().forEach(e ->{  
  3.     if(e.length() >= 5){  
  4.         return;  
  5.     }  
  6.     System.out.println(e);  
  7. });  
上述代码的输出结果是如下图所示:

技术图片
可以看出return起到的作用和continue是相同的。

想知道这是为什么,在Stack Overflow中找到一个答案,主要是说foreach()不是一个循环,不是设计为可以用break以及continue来中止的操作。

 

----------------------------------------------------------------------------------------------------------

针对问题:

1、foreach()循环操作元素时,是否会退出lambda表达式,如下图所示:

技术图片

不管你遍历到哪个集合中的元素,上图都会停在第一行程序中而不会发生跳转,所以是不会停止lambda表达式的执行的

 

以上是关于在Java8的foreach()中使用return/break/continue,不会跳出循环的主要内容,如果未能解决你的问题,请参考以下文章

Java8 Lambda 表达式中的 forEach 如何提前终止?

Java8,stream().map().collect(Collectors.toList()).forEach()和stream().map().forEach()有什么区别?

Java8中Stream类中的forEach是抽象方法,为啥在调用的时候不用重写该方法就能实现遍历?

从 Java 8 forEach 循环返回一个值

带有索引的Java 8 forEach [重复]

foreach中使用return失效