JDK新特性——Stream代码简洁之道的详细用法 (3)

BinaryOperator<A> combiner();函数接口,该参数的作用跟上一个方法(reduce)中的combiner参数一样,将并行流中各个子进程的运行结果(accumulator函数操作后的容器A)进行合并。

Function<A, R> finisher();函数式接口,参数为:容器A,返回类型为:collect方法最终想要的结果R。

Set<Characteristics> characteristics();返回一个不可变的Set集合,用来表明该Collector的特征

/** * @program: lambda * @ClassName Customer * @description: * @author: muxiaonong * @create: 2020-10-24 11:36 * @Version 1.0 **/ public class Customer { private String name; private Integer age; ...getset忽略 } public static void main(String[] args) { Customer c1 = new Customer("张三",10); Customer c2 = new Customer("李四",20); Customer c3 = new Customer("王五",10); List<Customer> list = Arrays.asList(c1,c2,c3); //转成list List<Integer> ageList = list.stream().map(Customer::getAge).collect(Collectors.toList()); System.out.println("ageList:"+ageList);//ageList:[10, 20, 10] //转成set Set<Integer> ageSet = list.stream().map(Customer::getAge).collect(Collectors.toSet()); System.out.println("ageSet:"+ageSet);//ageSet:[20, 10] //转成map,注:key不能相同,否则报错 Map<String, Integer> CustomerMap = list.stream().collect(Collectors.toMap(Customer::getName, Customer::getAge)); System.out.println("CustomerMap:"+CustomerMap);//CustomerMap:{李四=20, 张三=10, 王五=10} //字符串分隔符连接 String joinName = list.stream().map(Customer::getName).collect(Collectors.joining(",", "(", ")")); System.out.println("joinName:"+joinName);//joinName:(张三,李四,王五) //聚合操作 //1.学生总数 Long count = list.stream().collect(Collectors.counting()); System.out.println("count:"+count);//count:3 //2.最大年龄 (最小的minBy同理) Integer maxAge = list.stream().map(Customer::getAge).collect(Collectors.maxBy(Integer::compare)).get(); System.out.println("maxAge:"+maxAge);//maxAge:20 //3.所有人的年龄 Integer sumAge = list.stream().collect(Collectors.summingInt(Customer::getAge)); System.out.println("sumAge:"+sumAge);//sumAge:40 //4.平均年龄 Double averageAge = list.stream().collect(Collectors.averagingDouble(Customer::getAge)); System.out.println("averageAge:"+averageAge);//averageAge:13.333333333333334 //分组 Map<Integer, List<Customer>> ageMap = list.stream().collect(Collectors.groupingBy(Customer::getAge)); System.out.println("ageMap:"+ageMap);//ageMap:{20=[com.mashibing.stream.Customer@20ad9418], 10=[com.mashibing.stream.Customer@31cefde0, com.mashibing.stream.Customer@439f5b3d]} //分区 //分成两部分,一部分大于10岁,一部分小于等于10岁 Map<Boolean, List<Customer>> partMap = list.stream().collect(Collectors.partitioningBy(v -> v.getAge() > 10)); System.out.println("partMap:"+partMap); //规约 Integer allAge = list.stream().map(Customer::getAge).collect(Collectors.reducing(Integer::sum)).get(); System.out.println("allAge:"+allAge);//allAge:40 } 六、Stream的方法摘要 修饰符和类型 方法和说明
static Collector<T,?,Double>   averagingDouble(ToDoubleFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的双值函数的算术平均值。  
static Collector<T,?,Double>   averagingInt(ToIntFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的整数值函数的算术平均值。  
static Collector<T,?,Double>   averagingLong(ToLongFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的长值函数的算术平均值。  
static <T,A,R,RR> Collector<T,A,RR>   collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher) 适应 Collector进行额外的整理转换。  
static Collector<T,?,Long>   counting() 返回 Collector类型的接受元件 T计数输入元件的数量。  
static <T,K> Collector<T,?,Map<K,List>>   groupingBy(Function<? super T,? extends K> classifier) 返回 Collector “由基团”上的类型的输入元件操作实现 T ,根据分类功能分组元素,并且在返回的结果 Map 。  
static <T,K,A,D> Collector<T,?,Map<K,D>>   groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream) 返回 Collector “由基团”上的类型的输入元件操作实现级联 T ,根据分类功能分组元素,然后使用下游的指定执行与给定键相关联的值的归约运算 Collector 。  
static <T,K,D,A,M extends Map<K,D>>Collector<T,?,M>   groupingBy(Function<? super T,? extends K> classifier, Supplier mapFactory, Collector<? super T,A,D> downstream) 返回 Collector “由基团”上的类型的输入元件操作实现级联 T ,根据分类功能分组元素,然后使用下游的指定执行与给定键相关联的值的归约运算 Collector 。  
static <T,K> Collector<T,?,ConcurrentMap<K,List>>   groupingByConcurrent(Function<? super T,? extends K> classifier) 返回一个并发 Collector “由基团”上的类型的输入元件操作实现 T ,根据分类功能分组元素。  
static <T,K,A,D> Collector<T,?,ConcurrentMap<K,D>>   groupingByConcurrent(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream) 返回一个并发 Collector “由基团”上的类型的输入元件操作实现级联 T ,根据分类功能分组元素,然后使用下游的指定执行与给定键相关联的值的归约运算 Collector 。  
static <T,K,A,D,M extends ConcurrentMap<K,D>> Collector<T,?,M>   groupingByConcurrent(Function<? super T,? extends K> classifier, Supplier mapFactory, Collector<? super T,A,D> downstream) 返回一个并发 Collector “由基团”上的类型的输入元件操作实现级联 T ,根据分类功能分组元素,然后使用下游的指定执行与给定键相关联的值的归约运算 Collector 。  
static Collector<CharSequence,?,String>   joining() 返回一个 Collector ,按照遇到的顺序将输入元素连接到一个 String中。  
static Collector<CharSequence,?,String>   joining(CharSequence delimiter) 返回一个 Collector ,按照遇到的顺序连接由指定的分隔符分隔的输入元素。  
static Collector<CharSequence,?,String>   joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 返回一个 Collector ,它将按照指定的 Collector分隔的输入元素与指定的前缀和后缀进行连接。  
static <T,U,A,R> Collector<T,?,R>   mapping(Function<? super T,? extends U> mapper, Collector<? super U,A,R> downstream) 适应一个 Collector类型的接受元件 U至类型的一个接受元件 T通过积累前应用映射函数到每个输入元素。  
static Collector<T,?,Optional>   maxBy(Comparator<? super T> comparator) 返回一个 Collector ,它根据给出的 Comparator产生最大元素,描述为 Optional 。  
static Collector<T,?,Optional>   minBy(Comparator<? super T> comparator) 返回一个 Collector ,根据给出的 Comparator产生最小元素,描述为 Optional 。  
static Collector<T,?,Map<Boolean,List>>   partitioningBy(Predicate<? super T> predicate) 返回一个 Collector ,根据Predicate对输入元素进行 Predicate ,并将它们组织成 Map<Boolean, List> 。  
static <T,D,A> Collector<T,?,Map<Boolean,D>>   partitioningBy(Predicate<? super T> predicate, Collector<? super T,A,D> downstream) 返回一个 Collector ,它根据Predicate对输入元素进行 Predicate ,根据另一个 Collector减少每个分区的值,并将其组织成 Map<Boolean, D> ,其值是下游缩减的结果。  
static Collector<T,?,Optional>   reducing(BinaryOperator op) 返回一个 Collector ,它在指定的 Collector下执行其输入元素的 BinaryOperator 。  
static Collector<T,?,T>   reducing(T identity, BinaryOperator op) 返回 Collector执行下一个指定的减少其输入元件的 BinaryOperator使用所提供的身份。  
static <T,U> Collector<T,?,U>   reducing(U identity, Function<? super T,? extends U> mapper, BinaryOperator op) 返回一个 Collector ,它在指定的映射函数和 BinaryOperator下执行其输入元素的 BinaryOperator 。  
static Collector<T,?,DoubleSummaryStatistics>   summarizingDouble(ToDoubleFunction<? super T> mapper) 返回一个 Collector , double生产映射函数应用于每个输入元素,并返回结果值的汇总统计信息。  
static Collector<T,?,IntSummaryStatistics>   summarizingInt(ToIntFunction<? super T> mapper) 返回一个 Collector , int生产映射函数应用于每个输入元素,并返回结果值的汇总统计信息。  
static Collector<T,?,LongSummaryStatistics>   summarizingLong(ToLongFunction<? super T> mapper) 返回一个 Collector , long生产映射函数应用于每个输入元素,并返回结果值的汇总统计信息。  
static Collector<T,?,Double>   summingDouble(ToDoubleFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的双值函数的和。  
static Collector<T,?,Integer>   summingInt(ToIntFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的整数值函数的和。  
static Collector<T,?,Long>   summingLong(ToLongFunction<? super T> mapper) 返回一个 Collector ,它产生应用于输入元素的长值函数的和。  
static <T,C extends Collection> Collector<T,?,C>   toCollection(Supplier collectionFactory) 返回一个 Collector ,按照遇到的顺序将输入元素累加到一个新的 Collection中。  
static <T,K,U> Collector<T,?,ConcurrentMap<K,U>>   toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper) 返回一个并发的 Collector ,它将元素累加到 ConcurrentMap ,其键和值是将所提供的映射函数应用于输入元素的结果。  
static <T,K,U> Collector<T,?,ConcurrentMap<K,U>>   toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator mergeFunction) 返回一个并发的 Collector ,它将元素累加到一个 ConcurrentMap ,其键和值是将提供的映射函数应用于输入元素的结果。  
static <T,K,U,M extends ConcurrentMap<K,U>>   Collector<T,?,M> toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator mergeFunction, Supplier mapSupplier) 返回一个并发的 Collector ,它将元素累加到一个 ConcurrentMap ,其键和值是将所提供的映射函数应用于输入元素的结果。  
static Collector<T,?,List>   toList() 返回一个 Collector ,它将输入元素 List到一个新的 List 。  
static <T,K,U> Collector<T,?,Map<K,U>>   toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper) 返回一个 Collector ,它将元素累加到一个 Map ,其键和值是将所提供的映射函数应用于输入元素的结果。  
static <T,K,U> Collector<T,?,Map<K,U>>   toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator mergeFunction) 返回一个 Collector ,它将元素累加到 Map ,其键和值是将提供的映射函数应用于输入元素的结果。  
static <T,K,U,M extends Map<K,U>> Collector<T,?,M>   toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator mergeFunction, Supplier mapSupplier) 返回一个 Collector ,它将元素累加到一个 Map ,其键和值是将所提供的映射函数应用于输入元素的结果。  
static Collector<T,?,Set> toSet()   返回一个 Collector ,将输入元素 Set到一个新的 Set 。  
总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfxjd.html