Java中的地图内部的地图

  • 本文关键字:地图 内部 Java java
  • 更新时间 :
  • 英文 :


我想把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 );

最新更新