更新地图的价值

时间:2019-12-24 09:55:00

标签: java java-8 hashmap

我正在使用Java8,并且有一张地图

Map<Intege,Map<String,String>> mainMap=new HashMap()

当前我正在按如下方式更新内部地图的值

Map map = mainMap.get(1);
map.put("abc", "abc+xyz");
mainMap.put(1, map);

有人可以用Java8或任何其他方法来帮助我吗。

1 个答案:

答案 0 :(得分:3)

首先,您必须避免使用原始类型。

您必须使用菱形运算符正确初始化主地图。

Map<Integer,Map<String,String>> mainMap=new HashMap<>()

<>非常重要。

此外,不要仅将map定义为Map。它必须定义为

Map<String,String> map = mainMap.get(1);

现在问问题本身。在类似情况下,问题通常是当您在顶图中没有某个键的值时会发生什么。您必须执行以下操作:

map = mainMap.get(1);
if ( map == null ) {
   map = new HashMap<>();
   mainMap.put(1, map);
}
map.put("some key", "some value");

如果您没有if子句,并且在地图中先前不存在主键的情况下,在使用NullPointerException时会遇到map.put(...)。 / p>

自Java 8开始,Map接口中添加了一些默认方法,因此您可以保存该样板。新的习惯用法是:

mainMap.computeIfAbsent(1, k->new HashMap<>()).put("some key", "some value");

如果存在1的映射,它将从computeIfAbsent返回。如果不存在,它将被创建并放置在mainMap中,并返回。因此,您可以直接在put返回的结果上使用computeIfAbsent(...)

当然,这必须使用正确定义和初始化的地图类型完成-再次,不要使用原始类型。