代码之家  ›  专栏  ›  技术社区  ›  Herr Derb

嵌套Hashmap:putIfAbsent不需要空检查和手动获取的替代方法?

  •  1
  • Herr Derb  · 技术社区  · 8 年前

    我有个巢 HashMap HashMap<String, HashMap<String,Object>> .

    我创造了一个 add 方法填充 哈希图

    private void add(String currentVersion, String targetVersion, Object object) {
        HashMap <String, HashMap <String, Object >> nestedMap = definedUpdatePlans.putIfAbsent(currentVersion, new HashMap());
        if (nestedMap == null) {
            nestedMap = definedUpdatePlans.get(currentVersion);
        }
        nestedMap.put(targetVersion, object);
    }
    

    如您所见,如果不存在嵌套映射,我将添加它。如果它已经存在,我将获取当前值作为返回值。万一它不在, putIfAbsent 回报 null 这需要我执行空检查和手动获取来填充变量。

    这看起来不太干净,但我不知道更好的方法。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Eran    8 年前

    使用 computeIfAbsent :

    private void add(String currentVersion, String targetVersion, Object object) {
        definedUpdatePlans.computeIfAbsent(currentVersion, k -> new HashMap())
                          .put(targetVersion, object);
    }
    

    它返回:

    推荐文章