其他事项

如何在foreach中进行break或者continue?

传统的循环写法中,我们可以使用break关键字来结束整个循环操作,使用continue关键字来跳过当前循环:

List<String> colors = new ArrayList<>(Arrays.asList("white", "black", "red", "blue", "green"));
//当遇到颜色时,结束整个循环
for (String color : colors) {
    if (color.equals("red")) {
        break;
    }
    System.out.println(color);
}
//当遇到蓝颜色时,跳过本次循环
for (String color : colors) {
    if (color.equals("blue")) {
        continue;
    }
    System.out.println(color);
}

lambda表达式的foreach并不支持这两个关键字,如果想要使用break或者continue这种语义,可以使用以下折中的办法:

使用return关键字实现continue的语义

使用抛出异常的方式实现break的语义

但是在实践中,并不推荐使用这种折中的方式去实现break或者continue的语义,即不应该使用foreach。而是应该根据程序的意图,去选择stream中提供的其他方法来达到目的。

比如,如果想要在一个集合中找到符合特定条件的第一个元素,可以使用filterfindFirst的组合:

再比如,如果想要判断一个元素在不在这个集合中,可以使用anyMatch这个方法:

内容来源

Break or return from Java 8 stream forEach?

Last updated