我有一个这样的考试表:
[1, 1.00]
[2, 0.75]
[3, 0.33]
这应该是我的整数地图,十进制数'流后的结果:
月,费率
Collectors.counting()
费率=通过/通过+失败
现在我有以下代码可以使用,但我必须使用Rate公式更改repository.findAllLastYearExames()
.stream().collect(Collectors.groupingBy(Exam::getMonthExam, Collectors.counting()));
:
{{1}}
答案 0 :(得分:1)
这样做的一种方法是首先过滤状态未通过或未通过的考试,然后使用averagingDouble
,您将为通过的考试返回1,为未通过的考试返回0计算平均值。
import static java.util.stream.Collectors.averagingDouble;
import static java.util.stream.Collectors.groupingBy;
...
Map<Integer, Double> map =
examList.stream()
//or filter to have a status that is either PASS or FAIL instead
.filter(e -> e.getStatus() != Exam.Status.ABSENCE)
.collect(groupingBy(Exam::getMonthExam,
averagingDouble(e -> e.getStatus() == Exam.Status.PASS ? 1 : 0)));