1

我有这样的地图设置:

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

4 回答 4

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);
于 2013-08-08T17:16:56.813 回答
3

泰德的回答是正确的。

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

SetMultimap Javadoc

相关堆栈溢出答案

于 2013-08-08T17:28:39.703 回答
2

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

于 2013-08-08T17:17:22.357 回答
1

那是因为 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);
    }
于 2013-08-08T17:20:17.353 回答