我有这样的地图设置:
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)
答案 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。它将地图的值部分视为集合
答案 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);
}