Nik*_*ita 6 java collections java-stream
我有一堂课
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;
Run Code Online (Sandbox Code Playgroud)
并且有一种方法可以将学生添加到课程的地图中
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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要同时在一张地图中获得多个平均值。不仅engGrade,还有mathGrade、programmingGrade等等。我认为这种情况下的代码应该是格式,Map<Integer, List<Double>>
但我不知道该怎么做。请告诉我
例如,我现在显示 "Course = 1, average eng grade = ..."
而且我需要显示"Course = 1, average eng grade = ..., average math grade = ..."
,即,以便在地图中有多个 Double 值??
Ahm*_*ETI 10
我建议使用这种方法
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;
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它
Student.averageInt(students, Student::getMathGrade);
Student.averageInt(students, Student::getProgrammingGrade);
Run Code Online (Sandbox Code Playgroud)
小智 2
您可以使用 HashMap 的 HashMap。外部哈希映射键是课程编号,值是一个 EnumMap,其中包含您想要的特定课程平均值的枚举。
public enum Averages {
MATHAVG, PROGRAMMINGAVG, etc..
}
Run Code Online (Sandbox Code Playgroud)
从中检索就像
courseMap.get(courseNumber).get(Averages.MATHAVG);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
136 次 |
最近记录: |