我有以下几类:
public class StudentGrade {
int studentId;
double value;
Date date;
...
}
我想以Map的形式获取学生的最高成绩(studentId -〉StudentGrade)
public Map<Integer, StudentGrade> getMaxGradeByStudent(List<StudentGrade> grades) {
Map<Integer, Optional<StudentGrade>> maxGrades = grades.stream().collect(
Collectors.groupingBy(
StudentGrade::getStudentId,
Collectors.maxBy(Comparator.comparing(StudentGrade::getValue)))
);
Map<Integer, StudentGrade> finalGrades = new HashMap<>();
maxGrades.entrySet().forEach(entry -> {
entry.getValue().ifPresent(value -> finalGrades.put(entry.getKey(), value));
})
}
有没有更好的方法来做这件事?我想避免必须初始化一个新的散列表和使用流的一切。
2条答案
按热度按时间irtuqstp1#
您可以使用
toMap
代替groupingBy
,使用BinaryOperator
代替Collectors.maxBy
,例如:a11xaf1n2#
如果要避免流,可以使用此选项