天天看点

Java8新特性JDK8之summarizing集合统计Java新特性玩转JDK8之summarizing集合统计

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