public static Map<String, CalculationResultDTO> statisticsLevelSubtotal(final List computeResultExports,
final int scoreItemLength) {
final BigDecimal weightGroupDataCount = BigDecimal.valueOf(CollectionUtils.size(computeResultExports) / scoreItemLength);
return CollectionUtils.emptyIfNull(computeResultExports)
.stream()
.map(item -> levelSubtotalCompute(item, weightGroupDataCount))
.collect(Collectors.groupingBy(CalculationResultDTO::getScoreItemId,
LinkedHashMap::new,
Collectors.reducing(new CalculationResultDTO(),
(c1, c2) -> {
BigDecimal calculationResultValue = c1.getCalculationResultValue().orElse(BigDecimal.ZERO);
c1.setCalculationResultValue(calculationResultValue.add(c2.getCalculationResultValue()));
return c1;
})));