Java 8 流 Map<String, List<String>> 每个键值的总和

标签 java list dictionary java-8 java-stream

我对 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) { .. }

最佳答案

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

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

关于Java 8 流 Map<String, List<String>> 每个键值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428490/

相关文章:

list - capybara :选择或单击下拉列表中的链接

python - 将字典值读取为正则表达式,返回匹配项

python - 在 Python 中从 OrderedDict 访问数据并对其进行循环

Java Matcher 组输出问题

java - 以编程方式使用 IVY 依赖管理器

java - java OOP中的矩阵操作

Python 3 调用 "list"有奇怪的副作用

java - Criteria 正确生成 SQL 查询,但不返回任何内容

java - '<T>'列表的测试实现

python - 使用字典在数据集中查找条目