【问题标题】:Why is this returning a boolean instead of a long?为什么这会返回布尔值而不是长值?
【发布时间】:2013-08-10 12:32:09
【问题描述】:

我有这样的地图设置:

Map<Integer, Set<Long>> myMap = new HashMap<Integer, Set<Long>>();

我正在尝试将我的第一个值添加到 myMap,如下所示:

myMap.put(1, myMap.get(1).add(myLong));

java 会返回这个:

The method put(Integer, Set&lt;Long&gt;) in the type Map&lt;Integer, Set&lt;Long&gt;&gt; is not applicable for the arguments (int, boolean)

【问题讨论】:

    标签: java map set


    【解决方案1】:

    泰德的回答是正确的。

    不知道您的任务的详细信息,您可能需要为此考虑使用 SetMultimap。它将映射的值部分视为一个集合

    SetMultimap Javadoc

    Related Stack Overflow answer

    【讨论】:

      【解决方案2】:

      那是因为 add 方法返回布尔值,编译器觉得你是在尝试添加布尔值而不是集合。当您使用“。”顺序链接多个方法调用时点运算符,最后一个方法返回的值用于赋值。在这种情况下,最后一个方法是 add(),它返回布尔值,因此编译器抱怨在映射中添加了错误的值。

      试试这个:

      Map<Integer, Set<Long>> myMap = new HashMap<Integer, Set<Long>>();
          if (myMap.containsKey(1)) {
              Set<Long> set = myMap.get(1);
              set.add(myLong);
          } else {
              Set<Long> set = new HashSet<Long>();
              set.add(myLong);
              myMap.put(1, set);
          }
      

      【讨论】:

      • 如果myMap.get(1) 返回null,这将失败。如果它没有返回null,那么最后一行是不必要的。
      • 正确。这个例子只是为了解决他的编译错误。这不是一个完整的工作示例。我还是会更新代码。
      【解决方案3】:

      您调用的add 方法本身不会返回Set,它会返回boolean

      【讨论】:

        【解决方案4】:

        Set.add 返回一个布尔值,指示集合是否已更改。将您的代码更改为:

        myMap.get(1).add(myLong);
        

        (只要您知道myMap.get(1) 已经存在)。如果myMap.get(1) 可能还不存在,那么您需要执行以下操作:

        Set<Long> set = myMap.get(1);
        if (set == null) {
            set = new HashSet<Long>(); // or whatever Set implementation you use
            myMap.put(1, set);
        }
        set.add(myLong);
        

        【讨论】:

        • 我在另一个问题中问如何做到这一点,这就是他们告诉我的。我做错什么了吗? stackoverflow.com/questions/18131409/…
        • @code4me - 我无法追踪你是如何从上一个问题到这个问题的。但无论如何,我已经展示了如何在地图中不存在 Set 的情况下添加值的代码。
        猜你喜欢
        • 1970-01-01
        • 2019-07-23
        • 2015-02-19
        • 2020-01-17
        • 1970-01-01
        • 2020-03-21
        • 2019-10-04
        • 2013-01-03
        • 2020-05-12
        相关资源
        最近更新 更多