lambda forEach方法跳出循环

4,727 阅读2分钟

lambda forEach方法跳出循环

今天在code review的时候发现同事用forEach有点问题。

不知道大家是怎么在foreash 中跳出循环的。

首先回顾下forEach跳出循环:

  • continue : 终止本次循环,继续下一次循环。
  • break: 终止本循环

那么在Java8中如何使用,如果在Java8中直接写 continue会提示Continue outside of loopbreak则会提示Break outside switch or loopcontinue/break 需要在循环外执行.

lambda foreach()处理集合时不能使用break和continue, 也就是说不能按照普通的for循环遍历集合时那样根据条件来中止循环。 而如果要实现在普通for循环中的效果时,可以使用return来达到

**lambda表达式forEach中使用return相当于普通for循环中的continue **

终止本次循环,继续下一次循环

@Test
	void forEashDemo() {
		List<String> list = Arrays.asList("A1", "B2", "C3", "D5", "11", "22", "33", "44");

		List<Integer> integerList = Arrays.asList(1, 2, 3, 5, 11, 22, 33, 44);

		//跳出本次循环
		for (Integer integer : integerList) {
			if (integer > 11) {
				continue;
			}
			System.out.println("普通forEach循环"+integer);
		}

		//java 8跳出本次循环
		integerList.stream().forEach(e -> {
			if (e > 11) {
				return;
			}
			System.out.println("lambda forEach循环"+e);
		});
	}

输出结果

普通forEach循环1
普通forEach循环2
普通forEach循环3
普通forEach循环5
普通forEach循环11
lambda forEach循环1
lambda forEach循环2
lambda forEach循环3
lambda forEach循环5
lambda forEach循环11

终止本循环

@Test
	void forEashDemo2() {
		List<Integer> integerList = Arrays.asList(1, 2, 3, 5, 11, 22, 33, 44);

		//跳出for循环
		for (Integer integer : integerList) {
			if (integer > 11) {
				break;
			}
			System.out.println("普通forEach循环:"+integer);
		}

		//java 8跳出本次循环
		integerList.stream().forEach(e -> {
			if (e > 11) {
				throw new RuntimeException("终止lambda forEach循环");
			}
			System.out.println("lambda forEach循环:"+e);
		});
	}

输出结果

普通forEach循环:1
普通forEach循环:2
普通forEach循环:3
普通forEach循环:5
普通forEach循环:11
lambda forEach循环:1
lambda forEach循环:2
lambda forEach循环:3
lambda forEach循环:5
lambda forEach循环:11

java.lang.RuntimeException: 终止lambda forEach循环