我正在使用Java8,并且有一张地图
Map<Intege,Map<String,String>> mainMap=new HashMap()
当前我正在按如下方式更新内部地图的值
Map map = mainMap.get(1);
map.put("abc", "abc+xyz");
mainMap.put(1, map);
有人可以用Java8或任何其他方法来帮助我吗。
答案 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(...)
。
当然,这必须使用正确定义和初始化的地图类型完成-再次,不要使用原始类型。