Java新特性玩转JDK8之summarizing集合统计
summarizing 资料
- summarizing 是用来做统计相关的东西
- 分类(统计类型不同,使用方式相同)
- summarizingInt //统计int类型
- summarizingLong //统计Long类型
- summarizingDouble //统计Double类型
- summarizingInt源码示例
public static <T> Collector<T, ?, IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper) {
return new CollectorImpl<T, IntSummaryStatistics, IntSummaryStatistics>(
IntSummaryStatistics::new,
(r, t) -> r.accept(mapper.applyAsInt(t)),
(l, r) -> { l.combine(r); return l; }, CH_ID);
}
代码示例
- 统计学生年龄总和、最大值、最小值、平均值、总人数
- 学生类
public class Student {
private String province;
private int age;
public Student(String province,int age) {
this.province = province;
this.age = age;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 主函数
- 可以看到经过收集器** summarizingInt收集后返回 IntSummaryStatistics** 对象,再由该对象取得统计后的值。
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(new Student("广东", 23),
new Student("广东", 24),
new Student("广东", 23),
new Student("北京", 22),
new Student("北京", 20),
new Student("北京", 20),
new Student("海南", 25));
IntSummaryStatistics summaryStatistics = students.stream().collect(Collectors.summarizingInt(Student::getAge));
System.out.println("平均值:" + summaryStatistics.getAverage());//平均值:22.428571428571427
System.out.println("人数:" + summaryStatistics.getCount());//人数:7
System.out.println("最大值:" + summaryStatistics.getMax());//最大值:25
System.out.println("最小值:" + summaryStatistics.getMin());//最小值:20
System.out.println("总和:" + summaryStatistics.getSum());//总和:157
}
}
原文地址:https://www.yuque.com/haomingzi-kowv5/pmcs3t/mk97lt