java stream-统计分析(IntStream、LongStream、DoubleStream、.mapToInt()、.summaryStatistics())

介绍

转换成 IntStreamLongStreamDoubleStream 流,可以进行方便进行统计分析,如:求最大值、最小值、求和、平均值、总数等功能

转换方式

Stream 可通过方法 mapToIntmapToLongmapToDouble() 进行转换

例子:元素是数字类型

List<Integer> list = new ArrayList<>();
Collections.addAll(list,1,2,3,4);

IntSummaryStatistics res = list.stream()
        .mapToInt(e->e) // 转换的方式
        .summaryStatistics(); // 统计

System.out.println("最大值:"+res.getMin());
System.out.println("最小值:"+res.getMax());
System.out.println("总数:"+res.getCount());
System.out.println("平均数:"+res.getAverage());
System.out.println("和:"+res.getSum());

例子:元素是对象类型

Student 类:

package std;

public class Student{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

核心代码:

List<Student> list = new ArrayList<>();
Collections.addAll(list,
        new Student("李雷",4),
        new Student("韩梅梅",1),
        new Student("lili",3),
        new Student("lucy",2)
);
IntSummaryStatistics res = list.stream()
        .mapToInt(Student::getAge) // 根据年龄生成 IntStream 流
        .summaryStatistics(); // 统计

System.out.println("最小值:" + res.getMin());
System.out.println("最大值:" + res.getMax());
System.out.println("总数:"+ + res.getCount());
System.out.println("平均数:" + res.getAverage());
System.out.println("和:"+ res.getSum());

原文出处:http://malaoshi.top/show_1IX5KshCmrbA.html