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…

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在Java8,可以使用break语句来跳出foreach循环。但是,这种方式只能跳出当前循环,不能跳出外层循环。如果需要跳出外层循环,可以使用标签和break语句的结合方式来实现。例如: ``` outer: for (int i = 0; i < 10; i++) { inner: for (int j = 0; j < 10; j++) { if (i == 5 && j == 5) { break outer; } } } ``` 在上面的代码,使用了outer标签来标识外层循环,当i等于5且j等于5时,使用break outer语句跳出外层循环。 ### 回答2: 在Java 8,可以使用forEach循环来遍历集合或数组的元素。由于forEach循环是基于迭代器实现的,因此无法使用传统的break或continue语句来终止或跳出循环。不过,在forEach循环,可以使用Lambda表达式或方法引用来实现类似于break或continue的功能。 要实现类似于break的功能,需要使用一个布尔变量来标识是否需要终止循环。在循环内部,如果需要跳出循环,则将该变量设置为true,并返回。使用Lambda表达式的例子如下: ``` List<String> list = Arrays.asList("foo", "bar", "baz"); boolean found = false; list.forEach(str -> { if (str.equals("bar")) { found = true; return; } System.out.println(str); }); ``` 在上述代码,当找到字符串"bar"时,将found变量设置为true,并从Lambda表达式返回,因此将终止循环。 另一种实现类似于break的方法是使用Stream流,并使用findAny方法查找第一个匹配元素。例如: ``` List<String> list = Arrays.asList("foo", "bar", "baz"); Optional<String> result = list.stream().filter(str -> str.equals("bar")).findAny(); if (result.isPresent()) { System.out.println(result.get()); } ``` 在上述代码,filter方法用于查找与"bar"匹配的元素,findAny方法返回任意一个匹配元素。如果找到了元素,则使用get方法获取该元素值并输出。由于findAny方法是及早求值的,因此在找到第一个匹配元素后,将不会继续查询。因此,使用Stream流也可以实现类似于break的功能。 要实现类似于continue的功能,可以使用Lambda表达式或方法引用来实现。例如,以下代码使用方法引用来跳过与字符串"bar"匹配的元素: ``` List<String> list = Arrays.asList("foo", "bar", "baz"); list.forEach(System.out::println); ``` 在上述代码,使用方法引用传递System.out::println方法作为参数给forEach方法。因为所有元素都会被遍历,因此在打印"bar"时,该元素将被跳过,因此可以实现类似于continue的效果。 总之,在Java 8,使用forEach循环遍历集合或数组时,可以使用Lambda表达式或方法引用来实现类似于break和continue的功能。这为开发人员提供了更为简洁灵活的循环语句,使得代码更加可读易懂。 ### 回答3: 在 Java 8 ,可以使用 forEach() 来遍历一个集合。但是,在遍历过程,有时候需要跳出循环,这时候就需要用到一些技巧。 一种方式是使用传统的 for 循环来代替 forEach(),这样就可以使用 break 或 continue 来跳出循环了。不过,这种方式比较繁琐,并且语法不够简洁。 Java 8 可以使用 forEach 的 lambda 表达式return 语句来实现跳出循环的功能。但需要注意的是,此方法会在匿名内部类返回,而不是在外部方法。 另一种方式是通过使用 Stream API 的 anyMatch() 方法来实现跳出循环的功能。anyMatch() 方法可以会返回一个 boolean 类型,表示是否存在任意一个元素符合特定条件。如果返回 true,那么可以通过抛出异常的方式来跳出 forEach() 循环。代码示例如下: ```java List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); try { list.forEach(n -> { if (n == 4) { throw new RuntimeException("跳出循环"); } }); } catch (Exception e) { System.out.println(e.getMessage()); } ``` 这段代码,在 forEach() 循环如果遍历的元素等于 4,则抛出异常,从而跳出循环。在 catch 语句,可以打印出异常信息。 总之,在 Java 8 ,有多种方式可以实现跳出 forEach() 循环的功能,开发者可以根据实际需求来选择最适合自己的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值