为什么返回布尔值而不是长?

时间:2013-08-08 17:15:58

标签: java map set

我有这样的地图设置:

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<Long>) in the type Map<Integer, Set<Long>> is not applicable for the arguments (int, boolean)

4 个答案:

答案 0 :(得分:6)

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);

答案 1 :(得分:3)

特德的回答是正确的。

不了解任务的详细信息,您可能需要考虑使用SetMultimap。它将地图的值部分视为集合

SetMultimap Javadoc

Related Stack Overflow answer

答案 2 :(得分:2)

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

答案 3 :(得分:1)

这是因为add方法返回boolean值,编译器认为你试图添加布尔值而不是set。当您使用'。'顺序链接多个方法调用时。点运算符,最后一个方法返回的值用于赋值。在这种情况下,last方法是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);
    }