我想把map放在map的值字段中:
Map<String,String> innermap = new HashMap<String, String>();
Map<String ,Map<String,String>> map = new HashMap<String ,Map<String,String>>();
map.put("AAA", innermap.put("ab", "a , b") );
这给了我以下错误:
The method put(String, Map<String,String>) in the type Map<String,Map<String,String>> is not applicable for the arguments (String, String)
这可能吗?如果是,如何在地图中使用地图或任何其他替代这种结构的技术?
是的,你可以做到。正如前面所解释的,人们可能会这样做。
Map<String,String> innerMap = new HashMap<>();
Map<String ,Map<String,String>> map = new HashMap<>();
innerMap.put("ab", "a, b");
map.put("AAA", innerMap);
但从Java 8开始,如果映射不存在,则可以将其创建为值,然后使用computeIfAbsent
返回。如果键的值(即映射(不存在,将添加该值,然后返回。否则,只为给定的键返回值(即map(。
Map<String,Map<String,String> map = new HashMap<>();
map.computeIfAbsent("BBB", v->new HashMap<>()).put("r","s");
map.entrySet().forEach(System.out::println);
map.computeIfAbsent("BBB", v->new HashMap<>()).put("t","v");
map.entrySet().forEach(System.out::println);
打印
BBB={r=s}
BBB={r=s, t=v}
Map上的put方法不会返回您要放置的映射…您需要稍微切换代码:
Map<String,String> innermap = new HashMap<String, String>();
Map<String ,Map<String,String>> map = new HashMap<String ,Map<String,String>>();
innermap.put("ab", "a , b")
map.put("AAA", innermap);
它将像这个一样工作
Map<String,String> innermap = new HashMap<String, String>();
Map<String ,Map<String,String>> map = new HashMap<String ,Map<String,String>>();
innermap.put("ab", "a , b");
map.put("AAA", innermap);
put("ab","a,b"(返回String(与键"ab"相关联的前一个值,如果在映射中找不到该键,则返回null(,这就是为什么当你进行时
map.put("AAA", innermap.put("ab", "a , b") );
您会得到编译时错误方法将(String,Map<String,String>(放入类型Map<字符串,映射<字符串,字符串>gt;不适用于参数(String,String(,因为innermap.put("ab","a,b"(的返回类型是String
innermap.put("ab", "a , b")
将返回值的类型-->在您的情况下是字符串。
在代码源java:public interface Map<K,V>
函数V put(K key, V value);
中
* @return the previous value associated with <tt>key</tt>, or
* <tt>null</tt> if there was no mapping for <tt>key</tt>.
* (A <tt>null</tt> return can also indicate that the map
* previously associated <tt>null</tt> with <tt>key</tt>,
* if the implementation supports <tt>null</tt> values.)
当你把所有的东西放在一行中时,java将首先尝试在你的参数中计算innermap.put("ab", "a , b")
,然后你会得到类型为String的结果null,然后java将计算map.put("AAA", yourStringResult);
。这就是为什么它在日志中显示错误:
你不能把(String,String)
放在Map<String,Map<String,String>>
的地图上
你应该这样做:
Map<String,String> innermap = new HashMap<String, String>();
Map<String ,Map<String,String>> map = new HashMap<String ,Map<String,String>>();
innermap.put("ab", "a , b")
map.put("AAA", innermap );