记一次allMatch的坑

最近在学java8的Stream流遇到以下一个坑:

请看代码:

	@Test
    public void test3() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
        boolean a = list.stream().peek(System.out::println).allMatch(i -> i > 3);
        System.out.println(a);
        System.out.println("-------------------------------");

        List<Integer> list2 = Arrays.asList(1, 2, 3, 4, 5, 6);
        list2.forEach(System.out::println);
        boolean b = list2.stream().allMatch(i -> i > 3);
        System.out.println(b);
    }

输出结果:

1
false
-------------------------------
1
2
3
4
5
6
false

由此得出执行顺序为:

for (Integer i : list) {
       peek(i)
       if(!match(i)){
            return;
       }
 }

总结:

预想的执行顺序是先peek完再执行allMatch
但是allMatch是一个短路操作。。

补充一下其他短路终端操作:

  • 匹配所有 allMatch
  • 任意匹配 anymMatch
  • 不匹配 noneMatch
  • 查找首个 findFirst
  • 查找任意 findAny
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值