Java 代码计算评分项平均值 - 使用 Stream 和 Collectors
这段代码用于计算 ComputeResultExportDTO 对象列表中每个评分项的平均值。
以下是计算平均值的更新代码:
public static Map<String, BigDecimal> getAvgMap(final List<ComputeResultExportDTO> computeResultExportDTOS,
final BigDecimal totality) {
return CollectionUtils.emptyIfNull(computeResultExportDTOS)
.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(ComputeResultExportDTO::getScoreItemId,
Collectors.mapping(ComputeResultExportDTO::getAssessScore, Collectors.toList())))
.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream()
.reduce(BigDecimal.ZERO, BigDecimal::add)
.divide(new BigDecimal(e.getValue().size()), 2, RoundingMode.HALF_UP)
));
}
更改说明:
- 我们使用
Collectors.mapping而不是Collectors.reducing来为每个评分项创建一个assessScore值列表。 - 然后,我们使用
entrySet()将映射转换为键值对流。 - 对于每个键值对,我们通过使用
reduce将assessScore值列表减少为它们的总和来计算平均值,然后使用divide将总和除以列表的大小。 - 结果使用
Collectors.toMap收集到一个新映射中,其中键是评分项,值是平均分数。
请注意,平均分数使用 RoundingMode.HALF_UP 舍入到小数点后两位。您可以根据您的要求调整舍入模式。
原文地址: https://www.cveoy.top/t/topic/epTy 著作权归作者所有。请勿转载和采集!