首页 > 解决方案 > 如何转换结果类型?

问题描述

我正在尝试计算地图集合中的平均值。每个 Key 都只有一个值。如何转换 entry.getValue() 以使编译器不显示错误?

日食代码

标签: javagenericsmaps

解决方案


如果您真的被迫处理类型Map<String, ? extends Number>而不是 eg的映射Map<String, Double>,您可以调用doubleValue()数字实例将此数字转换为双精度数(不能保证结果准确,可能已四舍五入)。

public static double avg(final Map<String, ? extends Number> map) {
    double sum = 0d;
    for (final var entry : map.entrySet()) {
        sum += entry.getValue().doubleValue();
    }
    return sum / map.size();
}

但是,如果您可以更改方法的签名,我建议您改为:

public static double avg(final Map<String, Double> map) {
    double sum = 0d;
    for (final var entry : map.entrySet()) {
        sum += entry.getValue();
    }
    return sum / map.size();
}

推荐阅读