You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含值列表的Map转换为存储平均值的Map<String, Double>?

更简洁的Map平均值转换实现方式

你可以利用Java Stream的Collectors.toMap()直接完成转换,无需手动初始化HashMap并逐个put,代码更紧凑且更符合函数式编程风格:

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 = scoresMap.entrySet().stream()
        .collect(Collectors.toMap(
                Map.Entry::getKey,
                entry -> entry.getValue().stream()
                        .mapToDouble(Float::doubleValue)
                        .average()
                        .orElse(0.0) // 处理空列表场景,避免抛出NoSuchElementException
        ));

优化点说明

  • 链式调用替代手动循环,代码结构更简洁,减少冗余操作
  • 使用方法引用Float::doubleValue替代lambda表达式d -> d,可读性更强
  • 新增orElse(0.0)兜底逻辑,避免原代码中getAsDouble()在列表为空时抛出异常,提升代码鲁棒性

如果能确保所有列表都非空,也可以保留getAsDouble(),但建议保留兜底逻辑以应对边界情况。

内容的提问来源于stack exchange,提问作者Punter Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:37:07