java - 使用 Java 合并对 Map<String, Map<String, Integer>> 中的数字求和

标签 java lambda hashmap

我有一个变量

Map<String, Map<String, Integer>> movieToStateCount

看起来有点像

"movieToStateCount": {
    "Monster's Inc": {
        "Alabama": 1500,
        "Ohio": 5,
        "Hawaii": 715
    },
    "Wall-E": {
        "Alabama": 30000,
        "Ohio": 5000,
        "Hawaii": 14589
    }
}

我获得这些数字的方式是通过迭代数据库,这样每当我获得一个新条目时,我想将 1 添加到我的 movieToStateCount 中的 Integer 中。如果我只是更新 stateCount 我可以做类似的事情

stateCount.merge(state, 1, Integer::sum);

但是,有没有办法在 map 上进行合并?或者,我需要自己进去进行空检查吗?

谢谢

最佳答案

在主方法中提出了以下函数并进行了一些测试:

public static void main(String[] args) {
    final Map<String, Map<String, Integer>> movieToStateCount = new HashMap<>();
    addTo(movieToStateCount, "Oldboy", "Texas");
    addTo(movieToStateCount, "Oldboy", "Texas");
    addTo(movieToStateCount, "Oldboy", "Alabama");
    addTo(movieToStateCount, "LOTR", "Somewhere");
    System.out.println(movieToStateCount);
  }

  private static void addTo(final Map<String, Map<String, Integer>> movieToStateCount,
          final String movie, final String state) {
    movieToStateCount.merge(movie, new HashMap<String, Integer>() {{ put(state, 1); }},
        (m1, m2) -> { m1.put(state, m1.getOrDefault(state, 0) + m2.get(state)); return m1; });
  }

关于最初的问题,没有提出不允许检查 null 的解决方案,因为 getOrDefault 有效地做到了这一点。

关于java - 使用 Java 合并对 Map<String, Map<String, Integer>> 中的数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703648/

相关文章:

Java - 将谓词转换为字符串

java - 使用 HashMap 将数据输入表中

java - 为什么需要抽象方法?

java - Android 中无标签字符串的 JSON 解析

java - Neo4j OGM 2.0 查询路径

java - 为什么静态类型语言需要 Avro 架构注册表?

python - django lambda 和 django-activity-stream

javascript - 如何解决单元测试中的异步等待 - javascript

java - 为什么 Map 的 containsKey() 只调用 hashCode()?

java - 我如何知道我的缓存对象使用了多少内存?