Collectors收集器类,的8个API(配合收集器类的collect()方法使用)

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()方法:最小薪资
  1. 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);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8中的收集器(collection)是一种用于将输入元素累积到容器对象中的机制。Java 8引入了一个新的方法collectionAndThen(),它可以用于将一个收集器的结果传递给一个函数,然后返回一个新的收集器。该方法的语法如下: ```java public static <T, A, R, RR> Collector<T, A, RR> collectionAndThen(Collector<T, A, R> downstream, Function<R, RR> finisher) ``` 其中,`downstream`参数是一个收集器,`finisher`参数是一个函数。该方法返回一个新的收集器,该收集器首先使用`downstream`收集器来收集元素,然后使用`finisher`函数来处理收集器的结果。 例如,以下代码将使用一个收集器来计算一个整数列表的平均值,并将结果转换为一个字符串: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); String result = numbers.stream() .collect(Collectors.collectingAndThen( Collectors.averagingInt(Integer::intValue), avg -> "The average is " + avg)); System.out.println(result); // 输出 "The average is 3.0" ``` 在这个例子中,我们首先使用`averagingInt`收集器来计算整数列表的平均值。然后,我们将结果传递给一个lambda表达式,该表达式将平均值转换为一个字符串。最终,我们使用`collectionAndThen`方法将这两个步骤组合成一个收集器,并将结果存储在字符串变量中。 总之,`collectionAndThen`方法可以让我们在收集器完成操作后,对结果进行进一步的处理,从而提高代码的简洁性和可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值