今日份鸡汤:
不要沮丧,不必惊慌,做努力爬的蜗牛或坚持飞的笨鸟,我们试着长大,一路跌跌撞撞,哪怕遍体鳞伤~
今天在用foreach循环的时候有一个逻辑判断需要跳出循环,但是lambda表达式不能像for一样用break也不能用continue,只有return可以用,但是用了之后发现,lambda表达式foreach的return和普通foreach循环的continue效果是一样的,
代码如下:
public class ForEachDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.stream().forEach(i -> {
if (i == 3) return;
System.out.println(i);
});
}
}
执行结果:
解决办法:两种方法:
方法一:可以使用anyMatch()方法,anyMatch()里接收一个返回值为boolean类型的表达式,只要返回true就会终止循环,这样可以将业务逻辑写在返回判断结果前。
代码如下:
public class ForEachDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.stream().anyMatch(i -> {
if (i == 3) return true;
System.out.println(i);
return false;
});
}
}
执行结果:
方法二:可以使用filter()方法,思路是一样的,其中findAny表示只要找到满足的条件时停止。
代码如下:
public class ForEachDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.stream().filter(i -> {
if (i == 3) return true;
System.out.println(i);
return false;
}).findAny();
}
}
执行结果: