lambda forEach方法跳出循环
今天在code review的时候发现同事用forEach有点问题。
不知道大家是怎么在foreash 中跳出循环的。
首先回顾下forEach跳出循环:
- continue : 终止本次循环,继续下一次循环。
- break: 终止本循环
那么在Java8中如何使用,如果在Java8中直接写 continue会提示Continue outside of loop,break则会提示Break outside switch or loop,continue/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循环