实际应用
首先描述碰到的业务场景:给其他部门提供的接口提供的查询参数(类型)由一个变成多个(Integer变为List<Integer>),且类型字段只能为1、2、3、4四种情况。
毋庸置疑,入参一定是要校验的,有什么优雅的办法校验此种业务情况呢?
核心目的:校验参数,只有1、2、3、4四种类型为合理入参。
校验代码:
boolean result = typeList().stream().allMatch(type -> type == 1 || type == 2 || type == 3 || type == 4 );
OK,用上述代码就可以达到目的。那么接下来看一下Strean的match家族。
扩展
主要讲一下stream的count、anyMatch、allMatch、noneMatch操作。函数定义:
long count();
boolean anyMatch(Predicate<? super T> predicate);
boolean allMatch(Predicate<? super T> predicate);
boolean noneMatch(Predicate<? super T> predicate);
count
跟size功能一样,返回值都是集合元素的长度。不同的是,流是集合的一个高级工厂,中间操作是工厂里的每一道工序,我们对这个流操作完成后,可以进行元素的数量的和;
anyMatch
在判断条件里,任意一个元素成功,即返回true;
allMatch
判断条件中所判断的元素,所有都是true,才返回true;
noneMatch
与allMatch相反,判断条件中所判断的元素,所有都是false,才返回true;