本文已参加「新人创造礼」活动,一同敞开创造之路。

1.情形展现

Java8 lambda 表达式 forEach 如何提前终止?
如上图所示,咱们想要停止for循环,运用return。

执行结果如下:

Java8 lambda 表达式 forEach 如何提前终止?
咱们能够看到,只要赵六没被打印出来,后续的数组元素仍旧被执行了。

也就是说,关键字”return”,在这儿执行的效果相当于一般for循环里的关键词continue”。

2.原因分析

咱们知道,在一般for循环里面,想要提前完毕(停止)循环体运用”break“;

完毕本轮循环,进行下一轮循环运用”continue“;

另外,在一般for里,假如运用”return“,不仅强制完毕for循环体,还会提前完毕包含这个循环体的整个办法。

而在Java8中的forEach()中,”break“或”continue“是不被答应运用的,而return的意思也不是原来return代表的意义了。

咱们来看看源码

Java8 lambda 表达式 forEach 如何提前终止?
forEach(),说到底是一个办法,而不是循环体,完毕一个办法的执行用什么?当然是return啦;

java8的forEach()JavaScriptforEach()用法是何其的类似,感兴趣的能够去了解下(在文末)。

Java不是万能的,不要再吐槽它废物了。

3.解决计划

计划一:运用原始的foreach循环

Java8 lambda 表达式 forEach 如何提前终止?
运用过eclipse的老铁们应该知道,当咱们输入:foreach,再按快捷键:Alt+/,就会呈现foreach的代码提示。

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

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

Java8 lambda 表达式 forEach 如何提前终止?
for循环能够提前停止。

办法一:break

Java8 lambda 表达式 forEach 如何提前终止?
办法二:return(不推荐运用)

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

计划二:抛出反常

咱们知道,要想完毕一个办法的执行,正常的逻辑是:运用return;

可是,在实际运行中,往往有很多不突发状况导致代码提前停止,比方:空指针反常,其实,咱们也能够经过抛出假反常的办法来到达停止forEach()办法的目的。

Java8 lambda 表达式 forEach 如何提前终止?
假如觉得这种办法不友好,能够再包装一层。

Java8 lambda 表达式 forEach 如何提前终止?
这样,就完美了。

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

不然,确实实该因反常导致代码停止的时候,因为咱们手动捕获了并且没做任何处理,岂不是搬起石头砸自己的脚吗?