Java8中的foreach跳出循环break/return

java8中跳出循环不能使用break?

通过测试发现:

对于java8中的特殊写法lamada表达式中,不能使用break,会提示错误;

java8中使用return,会跳出当前循环,继续下一次循环,作用类似continue;

java8中使用foreach,但是不是lamada表达式写法,可以正常使用break或者return,可以直接跳出循环.

public class TestForEachJava8 {

        public static void main(String[] args) {
                
        
        System.out.println("c-------------------");
        
        //lamada表达式中foreach使用break
        List<String> c = Arrays.asList("6666", "7777", "8888", "9999");
        c.stream().forEach(str ->{
                if("8888".equals(str)){
                        return; //跳出当前循环,继续下一轮
                }
                System.out.println(str);
                
        });
        
        System.out.println("d-------------------");
        
        List<String> d = Arrays.asList("6666", "7777", "8888", "9999");
        d.stream().forEach(str ->{
                System.out.println(str);
                if("8888".equals(str)){
                        break; //IDE提示错误:break cannot be used outside of a loop or a switch
                }
                
        });
        System.out.println("a-------------------");
                List<String> a  = new ArrayList<>();
        a.add("1111");
        a.add("2222");
        a.add("3333");
        a.add("4444");
        for(String str:a){
                if("3333".equals(str)){
                        break;   //正常跳出循环
                }
                System.out.println(str);
        }
        
        System.out.println("b-------------------");
        
        List<String> b  = new ArrayList<>();
        b.add("1111");
        b.add("2222");
        b.add("3333");
        b.add("4444");
        for(String str:b){
                if("3333".equals(str)){
                        return; //也能跳出循环
                }
                System.out.println(str);
        }
        
        }

}

输出:

c-------------------
6666
7777
9999
d-------------------
6666
7777
8888
9999
a-------------------
1111
2222
b-------------------
1111
2222

TODO:foreach…