Lambda中forEach提前结束循环方案

背景

在项目中发抽用lambda的forEach,对于普通的for循环我们可以通过break等关键字提前跳出for循环,但是在lambda中的forEach使用时发现并不能终止for循环。

结论

anyMatch来替代forEach以达到提前结束的效果

解决

问题复现

在lambda的forEach中break关键字不可使用,而return的作用并不是终止for循环,而是continue的作用。
例子:

List<String> list2 = new ArrayList<String>() {{
            this.add("ccc");
            this.add("ccc");
            this.add("aaa");
            this.add("bbb");
}};
list2.stream().forEach(s -> {
    if ("aaa".equals(s)) {
        return;
    }
    System.out.println(s);
});
//返回结果
//ccc
//ccc
//bbb

上面例子可以看出return只是跳过了当前循环,并没有结束for循环。

方案解决

如果只是想满足既定条件后提前结束for循环,那我们可以用lambda的anyMatch来替代forEach以达到提前结束的效果。
anyMatch()里接收一个返回值为boolean类型的表达式,只要返回true就会终止循环,这样可以将业务逻辑写在返回判断结果前。
例子:

List<String> list2 = new ArrayList<String>() {{
    this.add("ccc");
    this.add("ccc");
    this.add("aaa");
    this.add("bbb");
}};
list2.stream().anyMatch(s -> {
    System.out.println(s);
    return "aaa".equals(s);
});
//输出结果
//ccc
//ccc
//aaa

由结果可看出bbb并没有打印,for循环提前终止。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值