java中的Map内部的Map

4uqofj5v  于 2021-08-20  发布在  Java
关注(0)|答案(4)|浏览(275)

我想把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内使用Map或替代此结构的任何其他技术?

u4vypkhs

u4vypkhs1#

Map上的put方法不会返回要放置到的Map。。。您需要稍微切换代码:

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);
72qzrwbm

72qzrwbm2#

它将像这样工作

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”)返回字符串(与键“ab”关联的上一个值,或者如果在map中找不到该键,则返回null),这就是为什么要这样做的原因

map.put("AAA", innermap.put("ab", "a , b") );

您得到编译时错误。类型map<string,map<string,string>>中的方法put(string,map<string,string>)不适用于参数(string,string),因为innermap.put(“ab”,“a,b”)的返回类型是string

pwuypxnk

pwuypxnk3#

是的,你能做到。如前所述,可以这样做。

Map<String,String> innerMap = new HashMap<>();
Map<String ,Map<String,String>> map = new HashMap<>();
innerMap.put("ab", "a, b");
map.put("AAA", innerMap);

但是从Java8开始,如果Map不存在,可以将其创建为值,然后使用 computeIfAbsent 如果键的值(即map)不存在,则添加该值,然后返回。否则,只返回给定键的值(即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}
9bfwbjaz

9bfwbjaz4#

innermap.put("ab", "a , b") 将返回您的值-->的类型(以字符串为例)。
在源代码java中: public interface Map<K,V> 功能 V put(K key, V value); ```

  • @return the previous value associated with key, 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 `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 );

相关问题