欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java Lambda表达式forEach无法跳出循环的解决思路

发布时间:2025/7/14 java 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java Lambda表达式forEach无法跳出循环的解决思路 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Java Lambda表达式forEach无法跳出循环的解决思路

如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导致的,看下面的例子:

public static void main(String[] args) {List<String> list = Lists.newArrayList();list.add("a");list.add("b");list.add("c");list.forEach(s -> {System.out.println("s = " + s);if (s.equals("b")) {return;}}); } //返回结果: //s = a //s = b //s = c

可以看到在forEach方法中即是采用了return,循环却仍在继续,那有什么办法能跳出循环呢?

可以通过抛异常的方法:

public static void main(String[] args) {List<String> list = Lists.newArrayList();list.add("a");list.add("b");list.add("c");try {list.forEach(s -> {System.out.println("s = " + s);if (s.equals("b")) {throw new RuntimeException();}});}catch (Exception e){} } //返回结果: //s = a //s = b

但仔细想想,这样也太挫了,其实可以换一种思路,跳出的前提肯定是满足了某一条件的,所以可以使用anyMatch()方法:

anyMatch()里接收一个返回值为boolean类型的表达式,只要返回true就会终止循环,这样可以将业务逻辑写在返回判断结果前。

public static void main(String[] args) {List<String> list = Lists.newArrayList();list.add("a");list.add("b");list.add("c");list.stream().anyMatch(s -> {System.out.println("do something");System.out.println("s=" + s);return s.equals("b");}); } // do something // s=a // do something // s=b

同理,采用类似的思路可以使用filter()方法,思路是一样的,其中findAny表示只要找到满足的条件时停止。

public static void main(String[] args) {List<String> list = Lists.newArrayList();list.add("a");list.add("b");list.add("c");list.stream().filter(s -> {System.out.println("s=" + s);return s.equals("b");}).findAny(); } //返回结果: //s = a //s = b

转载于:https://www.cnblogs.com/keeya/p/11306254.html

总结

以上是生活随笔为你收集整理的Java Lambda表达式forEach无法跳出循环的解决思路的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。