Java8 Stream(9)List集合查找 findFirst、findAny、anyMatch、allMatch、noneMatch

在开发中,经常要判断集合中是否有指定的值,对于在集合中查询匹配数据,可以用到findFirst、findAny、anyMatch、allMatch和noneMatch这些方法。

先造点数据

pigs.add(new Pig(1, "猪爸爸", 31, "M", false));
pigs.add(new Pig(2, "猪妈妈", 28, "F", true));
pigs.add(new Pig(3, "乔治", 2, "M", false));
pigs.add(new Pig(4, "佩奇", 5, "F", false));

一、查找

1. findFirst

如果一个集合数据是有序的,而且你要查找符合条件的第一条数据。

这时用findFirst是比较合适的。

Optional<Pig> pigOptional = pigs.stream()
        .filter(a -> a.getAge() > 5)
        .findFirst();

if (pigOptional.isPresent()){
    System.out.println(pigOptional.get().getName());
}

2. findAny

将返回集合中符合条件的任意一个元素。

Optional<Pig> anyPig = pigs.stream()
        .filter(a -> a.getAge() < 30)
        .findAny();

if (anyPig.isPresent()){
    System.out.println(anyPig.get().getName());
}

3. findFirst和findAny如何选择?

  • 如果你不关心返回的是哪一个数据,只要符合条件的就行,那就用findAny。
    而且在并行流上,findAny限制更少。

  • 如果你关心集合的顺序,要返回符合条件的第一个元素,那就用findFirst。

二、匹配

match是匹配的意思,返回结果是bool类型,要么匹配,要么就不匹配。

1. anyMatch

是否有1条age>50的数据?

Boolean anyOldThan50 = pigs.stream()
        .anyMatch(a -> a.getAge() > 50);

2. allMatch

是否所有数据都满足age<50
注意:如果集合为空,也就是流为空,allMatch还是会返回true

Boolean allLittleThan50 = pigs.stream()
        .allMatch(a -> a.getAge() < 50);

3. noneMatch

是否所有数据都不满足age<50

Boolean noneLittleThan50 = pigs.stream()
        .noneMatch(a -> a.getAge() < 50);
  • 17
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟 王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值