先举个例子
List<RetailOrderItemDto> filterItems = dto.getRetailOrderItems().stream().filter(e->e.getMachineBarCode()!=null).collect(Collectors.toList());
其实Stream是元素的集合,这点让Stream看起来用些类似Iterator;同时Stream也可以支持顺序和并行的对原Stream进行汇聚的操作;如上面的语句,可以分割为“创建Stream”、“转换Stream”、“聚合”三个板块。
创建Stream板块:dto.getRetailOrderItems().stream()
转换Stream板块:filter(e->e.getMachineBarCode()!=null)
聚合板块:collect(Collectors.toList)
其中聚合分为两种:可变汇聚和其它汇聚。
可变汇聚:把输入的元素们累积到一个可变的容器中,比如Collection或者StringBuilder;
其它汇聚:除去可变汇聚剩下的,一般都不是通过反复修改某个可变对象,而是通过把前一次的汇聚结果当成下一次的入参,反复如此。比如reduce,count,allMatch;
reduce:reduce方法非常的通用,后面介绍的count,sum等都可以使用其实现
①、Optional<T> reduce(BinaryOperator<T> accumulator);
reduce方法接受一个函数,这个函数有两个参数,第一个参数是上次函数执行的返回值(也
称为中间结果),第二个参数是stream中的元素,这个函数把这两个值相加,得到的和会被
赋值给下次执行这个函数的第一个参数。
②、T reduce(T identity, BinaryOperator<T> accumulator);
它允许用户提供一个循环计算的初始值,如果Stream为空,就直接返回该值。而且这个方法
不会返回Optional,因为其不会出现null值。
allMatch:是不是Stream中的所有元素都满足给定的匹配条件
anyMatch:Stream中是否存在任何一个元素满足匹配条件
findFirst: 返回Stream中的第一个元素,如果Stream为空,返回空Optional
noneMatch:是不是Stream中的所有元素都不满足给定的匹配条件
max和min:使用给定的比较器(Operator),返回Stream中的最大|最小值