> 每个键的值总和,java,list,dictionary,java-8,java-stream"/>

首页 > 解决方案 > Java 8 流映射> 每个键的值总和

问题描述

我对 Java 8(仍在学习)不太熟悉,并希望看看是否可以使用流找到与以下代码等效的东西。

下面的代码主要是尝试获取String中每个值对应的double值,然后求和。我在这种格式的任何地方都找不到太多帮助。我不确定使用流是否会清理代码或使其更混乱。

// safe assumptions - String/List (Key/Value) cannot be null or empty
// inputMap --> Map<String, List<String>>

Map<String, Double> finalResult = new HashMap<>();
for (Map.Entry<String, List<String>> entry : inputMap.entrySet()) {
    Double score = 0.0;
    for (String current: entry.getValue()) {
        score += computeScore(current);
    }
    finalResult.put(entry.getKey(), score);
}

private Double computeScore(String a) { .. }

标签: javalistdictionaryjava-8java-stream

解决方案


Map<String, Double> finalResult = inputMap.entrySet()
        .stream()
        .collect(Collectors.toMap(
                Entry::getKey,
                e -> e.getValue()
                      .stream()
                      .mapToDouble(str -> computeScore(str))
                      .sum()));

上面的代码迭代地图并创建一个具有相同键的新地图&在放置值之前,它首先迭代每个值 - 这是一个列表,通过调用computeScore()每个列表元素计算分数,然后将收集到的分数相加以放入价值。


推荐阅读