• One bite of Stream(2)


    查询与匹配

    Stream提供了allMatch(), anyMatch(), noneMatch(), findFirst(), findAny()功能,用于实现条件匹配与查询,一起来看看。

    anyMatch()

    anyMatch用于确认“有没有符合条件的元素?

    有->true->至少有一个符合要求

    没有->false->均不符合要求

    1. // 有没有漂亮姑娘?
    2. boolean result = girls.stream().anyMatch(ele -> ele.isBeautiful());

    allMatch()

    allMatch()用于确认“是不是每一项都符合条件?

    所有元素均符合->true

    只要有一项不符合->false

    1. // 是不是每个姑娘都很漂亮?
    2. boolean result = girls.stream().allMatch(ele -> ele.isBeautiful());

    noneMatch()

    noneMatch()用于确认“是不是所有的均不符合条件?”, 它是allMatch()的全否定

    所有元素均不满足->true

    有满足条件的->false

    1. // 是不是没有不漂亮的姑娘?
    2. // 是不是每个姑娘都很漂亮?
    3. boolean result = girls.stream().noneMatch(ele -> !ele.isBeautiful());

    findAny()

    找到符合条件的任意一个元素。

    1. // 找到任意一个身高大于170的姑娘
    2. Optional girl = girls.stream()
    3. .filter(ele->ele.getHeight() > 170)
    4. .findAny();

    当Stream中有满足条件的元素时,会返回任意一个满足条件的元素,否则Optional中没有元素。

    Optional属于可空类型,包含几个常用方法:

    get()如果存在则返回,否则抛出异常

    isPresent()判断是否存在元素

    ifPresent(Consumer)如果存在则执行

    orElse(T)如果不存在则返回给定值

    findFirst() 

    与findAny()类似,但返回第一个满足条件的元素,一般这个比较常用

    1. Optional firstSquare = someNumbers.stream()
    2. .map(x -> x * x)
    3. .filter(x -> x % 3 == 0)
    4. .findFirst();

    返回值仍然是可空类型。

  • 相关阅读:
    定时器的使用和线程安全
    Docker部署kafka|Go操作实践
    vue的常用指令
    【手写Mybatis】step01:创建简单的代理工厂
    HK32F030MF4P6 EXTI外部中断例程
    freemarker导出pdf
    模型部署与剪枝实践
    关于需要用到暂停的unity游戏
    Android 使用 RecyclerView 创建动态列表
    《Netty实战》读书笔记
  • 原文地址:https://blog.csdn.net/Day_and_Night_2017/article/details/125881853