我正在将一个包含键和相应值列表的Map转换为Map〈String,Double〉,其中的值是平均得分。有没有简洁的方法可以做到这一点?
Map<String, List<Float>> scoresMap = Map.of(
"Prod1", List.of(2f, 2f, 2f, 2f),
"Prod2", List.of(4f, 4f, 4f, 4f),
"Prod3", List.of(6f, 6f, 6f, 6f),
"Prod4", List.of(8f, 8f, 8f, 8f));
Map<String, Double> averageScores = new HashMap<>();
scoresMap.forEach( (key, value) -> {
averageScores.put(key, value.stream().mapToDouble(d -> d).average().getAsDouble());
}
);
2条答案
按热度按时间ffscu2ro1#
虽然将Map转换为流然后将条目收集回Map中当然是可能的,但我并不完全相信这种方法是最有意义的。
也许如果在流中有进一步的处理要做,那么这样做是有意义的,但在我看来,它有混淆代码目的的风险。
uurity8g2#
是的,可以使用
toMap
收集器:为了保持代码的可读性,我建议将求平均值的操作提取到一个单独的方法中:
或者甚至是: