我有2种方法,我需要计算平均值,包括学生没有尝试解决的任务(0分)。一切正常,直到0出现。我坚持了下来。我的问题是什么?
- totalScores -返回人员到其总得分的Map(作为平均值);
- averageTotalScore -返回所有人的平均成绩(一定要考虑课程的所有任务,而不仅仅是某个学生完成的任务)。
我的意思是,如果一个学生有一些数量(在我的情况下是4)的实验室工作,其中一些学生通过了(在我的情况下是3)的一些点,和一些(1)没有(他们应该成为0分),然后totalScore
应该计算平均值,包括任务,学生没有试图解决(0分)。但没有0分也算。averageTotalScore
应该计算每个实验的平均值,包括所有学生(在我的情况下是3)和那些没有尝试解决的人(0分)。
public Map<Person, Double> totalScores(Stream<CourseResult> results) {
return results.collect(Collectors.toMap(CourseResult::getPerson, result -> result
.getTaskResults()
.values()
.stream().mapToInt(s -> s)
.average()
.orElse(0.0)));
}
public double averageTotalScore(Stream<CourseResult> results) {
List<Double> scores = results.flatMap(result -> result
.getTaskResults()
.values()
.stream()
.mapToDouble(Double::valueOf).boxed())
.collect(Collectors.toList());
return scores.stream().mapToDouble(Double::doubleValue).average().orElse(0);
}
1条答案
按热度按时间myss37ts1#
我相信添加一个0值检查的过滤器应该可以解决这个问题,类似于下面的内容: