【问题标题】:add function in List/Set shows boolean valueList/Set 中的添加函数显示布尔值
【发布时间】:2016-12-20 06:27:02
【问题描述】:

我想将值添加到集合中,该集合是 Map 中的一个值。 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' 函数时,错误消息就像:“The method put(String, HashSet&lt;String&gt;) in type HashMap&lt;String,HashSet&lt;String&gt;&gt; is not applicable for the arguments (String, boolean)”。 任何人都可以解释为什么会出现这个错误..我们也必须一步一步地执行这个吗?

【问题讨论】:

    标签: java list set add


    【解决方案1】:

    问题是Set.add 返回一个布尔值,而不是集合。布尔返回值告诉您该值是否已添加到集合中。因此,您正在尝试将布尔值作为值添加到地图中。

    但是,无需继续将集合重新添加到地图中。您可以获取该集合并将新值添加到其中:

    if (fieldMap.containsKey(qName))
        fieldMap.get(qName).add(value);
    

    【讨论】:

    • fieldMap.get(qName).add(value);此行仅显示上述指定错误
    • 抱歉,这是不可能的。错误是“HashMap> 类型中的方法 put(String, HashSet) 不适用于参数 (String, boolean)”。我提供的语句中没有“put”方法,因此它不可能给出该错误。
    【解决方案2】:

    这就是 Map&lt;K,V&gt; 中新的 Java 8 方法专门设计的用途:

    V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
    

    你的情况

    fieldMap.computeIfAbsent(qName, k->new HashSet<>()).add(someString);
    

    computeIfAbsent 检查qName 的存在。如果它不存在,则调用“映射函数”(new HashSet&lt;&gt;())并将结果添加到Map。然后返回值(现有的值或新添加的值),并通过在 HashSet 上调用 add() 来完成。

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2018-01-02
      • 2020-04-15
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多