首页 > 解决方案 > Java流averagingInt由多个参数

问题描述

我有一堂课

static class Student {

    private String surname;
    private String firstName;
    private String secondName;
    private int yearOfBirth;
    private int course;
    private int groupNumber;
    private int mathGrade;
    private int engGrade;
    private int physicGrade;
    private int programmingGrade;
    private int chemistryGrade;

还有一种方法可以将学生添加到课程的地图中

public Map<Integer, Double> averageInt(List<Student> students) {
            Map<Integer, Double> map2 = students.stream()
                    .collect(Collectors.groupingBy(Student::getCourse,
                            Collectors.averagingInt(Student::getEngGrade)));
            return map2;
        }

但是,我需要同时在一张地图中使用多个平均值。不仅是engGrade,还有mathGrade、programmingGrade等等。我认为这种情况下的代码应该是格式Map<Integer, List<Double>> ,但我不知道该怎么做。请告诉我

例如,我现在显示"Course = 1, average eng grade = ..."

而我需要显示"Course = 1, average eng grade = ..., average math grade = ...",即让map中有多个Double值

标签: javacollectionsjava-stream

解决方案


我建议使用这种方法

    public static Map<Integer, Double> averageInt(List<Student> students, ToIntFunction<? super Student> mapper) {
        Map<Integer, Double> map2 = students.stream()
                .collect(Collectors.groupingBy(Student::getCourse, Collectors.averagingInt(mapper)));
        return map2;
    }

并像这样使用它

Student.averageInt(students, Student::getMathGrade);
Student.averageInt(students, Student::getProgrammingGrade);

推荐阅读