在列表中添加函数/set显示布尔值



我想将值添加到映射中的值中。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()来完成。

相关内容

最新更新