如何在java8中继续在forEach循环中继续

Sun*_*aik 9 java java-8

如何在java 8中的forEach循环中编写continue语句.

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

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

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);
});
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了编译时错误,说明了Undefined Label:LOOP

Ram*_*asi 18

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

像这样使用它:

List<Integer> numList = Arrays.asList(10,21,31,40,59,60);
numList.forEach( x-> {
    if( x%2 == 0) {
        return; // only skips this iteration.
    }
    System.out.println(x);
});
Run Code Online (Sandbox Code Playgroud)


Leo*_*ade 6

我想在这种情况下,最好的解决方案是在执行println之前过滤列表...

例如(我没有测试):

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

  • 由于懒惰,我认为foreach里面的`filter`和`return`之间的性能差异很小.但我更喜欢"过滤器",因为它更容易阅读. (4认同)