我有一个Student对象List<Student> allStudents的列表,我需要从其中找出哪个学生使用Java8stream API在每个课程和任务中获得了多少分数。我偶然发现了一些像这个one这样的老帖子,但不能适用于我的问题。
下面是我的嵌套类:
public class Student{
private long studentId;
private List<Course> courses;
public long getStudentId() {
return studentId;
}
public List<Course> getCourses() {
return courses;
}
}
public class Course{
private long courseId;
private List<Task> tasks;
public long getCourseId() {
return courseId;
}
public List<Task> getTasks() {
return tasks;
}
}
public class Task{
private long taskId;
private List<Assessment> assessments;
public long getTaskId() {
return taskId;
}
public List<Assessment> getAssessments() {
return assessments;
}
}
public class Assessment{
private String type;
private double score;
public String getType() {
return type;
}
public double getScore() {
return score;
}
}不知怎么的,多级分组对我来说不起作用。有人能在这方面给我指点一下吗?
发布于 2020-05-18 08:37:28
正如您在引用的旧问题中提到的,可以使用平面映射方法,其中每个嵌套级别被平面映射到所需的级别,如下所示:
Map<Triple<Long, Long, Long>, Double> result = allStudents.stream()
.flatMap(s -> s.getCourses().stream().map(
c -> ImmutableTuple.of(s.getStudentId(), c)))
.flatMap(sc -> sc.get().getTasks().stream().map(
t -> ImmutableTuple.of(sc.getFirst(), sc.get().getCourseId(), t)))
.flatMap(sct -> sct.get().getAssessments().stream().map(
a -> ImmutableTuple.of(sct.getFirst(), sct.getSecond(), sct.get().taskId, a.getScore())))
.collect(Collectors.groupingBy(
ImmutableQuadruple::remove,
Collectors.summingDouble(ImmutableQuadruple::get)
));注意:这是使用来自typedtuples库的元组
https://stackoverflow.com/questions/61860230
复制相似问题