我想将值添加到映射中的值中。IE。Map <String,HashSet<String>>
..我的代码是:
fieldMap = new LinkedHashMap<String, HashSet<String>>();
if(fieldMap.get(qName)!=null){
HashSet<String> tempSet = fieldMap.get(qName);
tempSet.add(//String);
fieldMap.put(qName, tempSet);}
在这里,我想直接放置值: fieldMap.put(qName,fieldMap.get(qName).add(//String))
..所以我可以在循环中替换上述3行。但是,当我给出'add
'函数时,错误消息会像:" HashMap<String,HashSet<String>>
类型中的The method put(String, HashSet<String>)
不适用于参数(String, boolean)
"。谁能解释为什么会出现此错误。。我们还必须一步一步地执行此错误?
问题是 Set.add
返回布尔值,而不是集合。布尔返回值告诉您是否将值添加到集合中。因此,您正在尝试在地图中添加布尔作为值。
但是,无需继续将集合添加到地图中。您可以获取集合并将新值添加到它:
if (fieldMap.containsKey(qName))
fieldMap.get(qName).add(value);
这是Map<K,V>
中新的Java 8方法是专门设计的:
V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
在您的情况下
fieldMap.computeIfAbsent(qName, k->new HashSet<>()).add(someString);
computeIfAbsent
检查是否存在qName
。如果不存在,则调用"映射函数"(new HashSet<>()
),并将结果添加到Map
中。然后,返回值(现有一个或新添加的值),您可以通过在HashSet
上调用add()
来完成。