2016-08-15 84 views
7

如何写continue语句forEach循环中使用Java 8如何将继续在侧forEach循环中java8

List<Integer> numList = Arrays.asList(10,21,31,40,59,60); 
numList.forEach(x->{ 
    if(x%2==0){ 
     continue; 
    } 
    System.out.println(x); 
}); 

上面的代码是给编译时错误说继续循环之外

List<Integer> numList = Arrays.asList(10,21,31,40,59,60); 
LOOP:numList.forEach(x->{ 
    if(x%2==0){ 
     continue LOOP; 
    } 
    System.out.println(x); 
}); 

上面的代码是给编译时错误说未定义标签:LOOP

+1

lambda表达式几乎等价于匿名类的实例。每次迭代都会在这个实例中调用重写的方法。所以如果你想继续,只要条件满足就返回方法。 – 11thdimension

回答

11

您可以使用return。它不会停止整个循环,而是停止当前的迭代。

使用方法如下:

List<Integer> numList = Arrays.asList(10,21,31,40,59,60); 
numList.forEach(x->{ 
    if(x%2==0){ 
     return; 
    } 
    System.out.println(x); 
}); 
6

我认为在这种情况下,最好的解决办法是过滤列表之前执行的println ...

为例(我没有测试):

List<Integer> numList = Arrays.asList(10,21,31,40,59,60); 
numList.stream().filter(x-> x%2 != 0).forEach(System.out::println); 
+4

由于懒惰,我认为foreach中'filter'和'return'之间的性能差异很小。但我更喜欢'filter',因为它更易于阅读。 – waltersu