阅读《Java实战》,本文为第6章总结,主要介绍收集器(Collectors)的使用,如收集器简介、归约与汇总处理、分组分区、收集器接口机制、自定义一个高效的收集器。
1、收集器(Collectors)
collect(Collector<? super T, A, R> collector)
是一个终端操作,接受的参数是定义流中元素累积到汇总结果的各种方式,该参数即为收集器。收集器包含的功能主要有两个:
- 用作高级归约:对流中的元素触发以一个归约操作,如
Collectors.toList()
将结构收集到一个List中返回。 - 预定义收集器:利用Collectors类提供的工厂方法(如
groupingBy
)创建收集器,扩展相关功能,主要三大功能如下:- 将流元素归约和汇总为一个值
- 元素分组
- 元素分区
2、归约和汇总
2.1 查询流中的最大值和最小值
Collectors.maxBy(Comparator<? super T> comparator)
:最大值收集器Collectors.minBy(Comparator<? super T> comparator)
:最小值收集器
1 | java复制代码 //求最值收集器使用示例 |
2.2 汇总
主要对结果做汇总统计,比如求和、平均值以及统计,具体使用如下:
1 | java复制代码 //# 汇总收集器示例 |
2.3 连接字符串
joining
工厂方法返回的收集器会把流中每一个对象引用toString()
方法得到的所有字符串连接成一个字符串。
1 | java复制代码 //# 连接收集器 |
2.4 广义的归约汇总
前三种收集器,本质是reducing
的常见特殊情况处理。比如,求和,本质内容是如下:
1 | java复制代码 //#广义的归约汇总 |
3、分组
与数据库的常见操作,根据一个或者多个属性对集合中的项目进行分组类似。Collectors.groupingBy
工厂方法返回的收集器可以实现该功能。
待完成:
2021年11月7日 新工作岗位入职,因为岗位需要nestjs相关技术栈+源码阅读活动,暂时暂缓javaCore后面内容阅读梳理~
本文转载自: 掘金