如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导致的,看下面的例子:
今天小编就为大家分享一篇关于Java 8跳过本次循环,继续执行以及跳出循环,终止循环的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 https://www.jb51.net/article/149433.htm
在Java8之前,最开始使用for i 循环,很老旧,后来有了高级的for each 循环,然后这个跳出本次循环和跳出所有的for循环,都简单,稍微没见过的就是跳出多层for循环。
然后就是Java8出的foreach循环,这个循环里面,break和continue都不管用啦。需要使用return,这个只能跳过本次循环,还是会继续执行for循环的,那么怎么跳出这个Java8的foreach循环呢?
下面对所有的循环,都来了一次操作。
看看如何,跳出当前循环,继续执行;或者直接跳出for循环;或者跳出多层for循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
|
下面是上面的代码的运行结果,可以对照着看一下。
最后是对于:跳出Java8的lambda的foreach循环的说明,摘自某stackflow。
-------------------------------------------------------------------------------------------------------------------------------------------------------
以下忽略即可
-------------------------------------------------------------------------------------------------------------------------------------------------------
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