淺談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

java中jdk8的forEach()方法return血的教訓!

啊啊啊!記錄。。。

JDK8中return竟然不return瞭。。。

but:::

2、

兩個for循環作對比,如下:

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: