Array|5万字:Stream和Lambda表达式最佳实践2( 三 )
输出结果:22:22:35.238 [main] INFO com.flydean.CollectorUsage - IntSummaryStatistics{count=4, sum=16, min=3, average=4.000000, max=5}复制代码9.9 Collectors.averagingDouble/Long/Int()
averagingDouble/Long/Int()对stream中的元素做平均:Double averageResult = list.stream().collect(Collectors.averagingInt(String::length));log.info("{}",averageResult);复制代码9.10 Collectors.summingDouble/Long/Int()
summingDouble/Long/Int()对stream中的元素做sum操作:Double summingResult = list.stream().collect(Collectors.summingDouble(String::length));log.info("{}",summingResult);复制代码9.11 Collectors.maxBy()/minBy()
maxBy()/minBy()根据提供的Comparator , 返回stream中的最大或者最小值:Optional
maxByResult = list.stream().collect(Collectors.maxBy(Comparator.naturalOrder()));log.info("{}",maxByResult);复制代码9.12 Collectors.groupingBy()
GroupingBy根据某些属性进行分组 , 并返回一个Map:Map> groupByResult = list.stream().collect(Collectors.groupingBy(String::length, Collectors.toSet()));log.info("{}",groupByResult);复制代码9.13 Collectors.partitioningBy()
PartitioningBy是一个特别的groupingBy , PartitioningBy返回一个Map , 这个Map是以boolean值为key , 从而将stream分成两部分 , 一部分是匹配PartitioningBy条件的 , 一部分是不满足条件的:Map> partitionResult = list.stream().collect(Collectors.partitioningBy(s -> s.length() > 3));log.info("{}",partitionResult);复制代码
看下运行结果:22:39:37.082 [main] INFO com.flydean.CollectorUsage - {false=[bob], true=[jack, alice, mark]}复制代码
结果被分成了两部分 。10. 创建一个自定义的collector
在之前的java collectors文章里面 , 我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法 , 将结果转换为特定的集合类 。
今天我们介绍一下怎么自定义一个Collector 。10.1 Collector介绍
我们先看一下Collector的定义:
文章图片
文章图片
Collector接口需要实现supplier(),accumulator(),combiner(),finisher(),characteristics()这5个接口 。
同时Collector也提供了两个静态of方法来方便我们创建一个Collector实例 。
我们可以看到两个方法的参数跟Collector接口需要实现的接口是一一对应的 。
下面分别解释一下这几个参数:supplier
Supplier是一个函数 , 用来创建一个新的可变的集合 。换句话说Supplier用来创建一个初始的集合 。accumulator
accumulator定义了累加器 , 用来将原始元素添加到集合中 。combiner
combiner用来将两个集合合并成一个 。finisher
finisher将集合转换为最终的集合类型 。characteristics
characteristics表示该集合的特征 。这个不是必须的参数 。
Collector定义了三个参数类型 , T是输入元素的类型 , A是reduction operation的累加类型也就是Supplier的初始类型 , R是最终的返回类型 。我们画个图来看一下这些类型之间的转换关系:
文章图片
文章图片
有了这几个参数 , 我们接下来看看怎么使用这些参数来构造一个自定义Collector 。10.2 自定义Collector
推荐阅读
- Array|臭氧层正在愈合,并对大气环流造成重大影响
- Array|瞄准“宅经济”!VR看房成年轻人租房新趋势
- Array|Spanlite公司使用3D打印一次高速烧结8,000个零件
- Array|面面俱到的绝佳体验 优质国产旗舰手机推荐
- Array|消息称爱奇艺或在港二次上市,回应称不予置评
- Array|中国移动首次招标边缘计算服务器 浪潮NE5260M5成功中标
- Array|远程课程“育见”VR 联想带来550个STEM教育模块
- Array|宁德时代拟190亿元展开产业链投资,提升公司市场竞争力
- Array|SA:2020年Q2全球智能音箱销量达3000万台,环比增长6%
- Array|GE超滤膜的材质特点
