Collectors收集器类,提供了非常丰富的API。
(7个API)
集合
主方法
List<Employee> list = Employee.getEmpList();
1、counting();
- 返回Long型数据
主方法
Long count = list.stream().collect(Collectors.counting());
System.out.print("公司的总人数:"+count);
区别 : stream的count()方法:同样返回Long型
主方法
Long count = list.stream().count();
System.out.print("公司的总人数:"+count);
2、maxBy();
- 返回Optional类对象,转换为Employee对象并返回
主方法
Optional<Employee> ageMax = list.stream().collect(Collectors.maxBy(Comparator.comparing(Employee::getAge)));
Employee older = ageMax.get();
3、minBy();
- 返回Optional类对象,转换为Employee对象并返回
主方法
Optional<Employee> ageMin = list.stream().collect(Collectors.minBy(Comparator.comparing(Employee::getAge)));
Employee younger = ageMin.get();
4、summingDouble(); 求和
- 返回double类型
主方法
double salarySum = list.stream().collect(Collectors.summingDouble(Employee::getSalary));
System.out.println("公司的薪资总和为:"+salarySum);
区别 : stream的mapToDouble()方法:返回DoubleStream流
主方法
DoubleStream salarys = list.stream().mapToDouble(Employee::getSalary);
double sum = salarys.sum();
System.out.println("公司的薪资总和为:"+salarySum);
5、averagingDouble();
- 返回double类型
double salaryAvg = list.stream().collect(Collectors.averageingDouble(Employee::getSalary));
System.out.printf("公司的平均薪资为:%2f\n"+salaryAvg);
常规类型格式化System.out.printf(“文字内容:%.2f”,salaraAvg);
6、summarizingDouble();
- 返回DoubleSummaryStatistics类对象
主方法
java.util.DoubleSummaryStatistics s = list.stream().collect(Collectors.summarizingDouble(Employee::getSalary)); //
- summarizingDouble():汇总方法,收集器收集后,返回DoubleSummaryStatistics对象。( 类似的还有summarizingInt(),summarizingLong() 。)
- DoubleSummaryStatistics类:数字统计类,用于统计操作(数据和,最大值,最小值,平均值;记数)
(创建统计对象,利用收集器类的summarizingDouble()方法,获取员工薪资各方面的统计数据。)。
- DoubleSummaryStatistics类,数字统计类的统计方法:
1)getSum()方法:薪资总数
2)getAvarage()方法:平均薪资
3)getMax()方法:最大薪资
4)getMin()方法:最小薪资
- getCount()方法:返回总数
7、joining();
-
返回String类型
-
对映射map()的结果,配合collect()方法,加工了一下格式,返回String型内容。
-
用这个收集器类的方法。可以将流对象转换为String型拼接内容。
-
map()映射返回的是,具体的数据,而不是流对象的所有内容
主方法
String nameList = list.stream().map(Employee::getName).collect(Collectors.joining(","));
区别:
- 收集器类的toList()方法,是将映射出的具体某一类的数据流,封装为List集合
- 收集器类的joining()方法,是将映射出的具体某一类值数据流,修改格式为String型内容。
8、groupingBy()方法:分组函数
- 分组后的数据,会按照不同的标签,分别保存一个集合。
- 然后按照“键-值”关系封装到Map对象中。
主方法
Function<Employee,String> f = Employee::getDept;
Map<String,List<Employee>> map = list.stream().collect(Collectors.groupingBy(f));
// 遍历Map分组的集合
List<String> deptList = map.keySet();
for(String deptName:deptList){
System.out.println("【"+deptName+"】部门的员工列表如下:");
List<Employee> deptList = map.get(deptName);
for(Employee emp:deptList){
System.out.println(" "+emp);
}
}