Stream提供了allMatch(), anyMatch(), noneMatch(), findFirst(), findAny()功能,用于实现条件匹配与查询,一起来看看。
anyMatch用于确认“有没有符合条件的元素?”
有->true->至少有一个符合要求
没有->false->均不符合要求
- // 有没有漂亮姑娘?
- boolean result = girls.stream().anyMatch(ele -> ele.isBeautiful());
allMatch()用于确认“是不是每一项都符合条件?”
所有元素均符合->true
只要有一项不符合->false
- // 是不是每个姑娘都很漂亮?
- boolean result = girls.stream().allMatch(ele -> ele.isBeautiful());
noneMatch()用于确认“是不是所有的均不符合条件?”, 它是allMatch()的全否定
所有元素均不满足->true
有满足条件的->false
- // 是不是没有不漂亮的姑娘?
- // 是不是每个姑娘都很漂亮?
- boolean result = girls.stream().noneMatch(ele -> !ele.isBeautiful());
找到符合条件的任意一个元素。
- // 找到任意一个身高大于170的姑娘
- Optional
girl = girls.stream() - .filter(ele->ele.getHeight() > 170)
- .findAny();
当Stream中有满足条件的元素时,会返回任意一个满足条件的元素,否则Optional中没有元素。
Optional属于可空类型,包含几个常用方法:
get()如果存在则返回,否则抛出异常
isPresent()判断是否存在元素
ifPresent(Consumer
)如果存在则执行 orElse(T)如果不存在则返回给定值
与findAny()类似,但返回第一个满足条件的元素,一般这个比较常用
- Optional
firstSquare = someNumbers.stream() - .map(x -> x * x)
- .filter(x -> x % 3 == 0)
- .findFirst();
返回值仍然是可空类型。