先总结:使用forEach()处理集合时不能使用break和continue这两个方法,可以使用无返回值的return跳出此次循环,效果同标准for循环的continue。
首先,forEach()先对入参判空,然后使用增强for循环调用action.accept(t),因为Consumer接口是一个函数式接口。所以可以使用Lambda表达式来对参数进行处理。
因为accept方法使用void修饰,即accept该方法没有返回值,所以使用带有返回值的return时会报错:
而使用无返回值的return可使return标记后的代码不可达,以达到跳出此次循环的效果:
如果在forEach()时使用了带有值的return,本质上等同于下例:
// 测试消费方法
public static void accept(Integer j, Consumer<Integer> con) {
con.accept(j);
}
// 测试数组
List<Integer> array = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));