我正在编写一个类,其构造函数采用List<String>
并返回一个长度为string key(Integer)
的hashmap,其值为arrayList<String>
,保存字符串。
那是我试图将字符串的长度映射到字符串列表。这是我的代码。
public class Solver {
Map<Integer,ArrayList<String>> inventoryMap;
//constructor
public Solver(List<String> list){
inventoryMap=new HashMap<Integer,ArrayList<String>>();
for (String s : list) {
int x = s.length();
if (inventoryMap.containsKey(x)){
inventoryMap.put(x,inventoryMap.get(x).add(s));
} else {
newlist=new ArrayList<String>();
newlist.add(s);
inventoryMap.put(x,newlist);
}
}
}
当我编译此代码时,我收到以下错误
Solver.java:12: put(java.lang.Integer,java.util.ArrayList<java.lang.String>) in java.util.Map<java.lang.Integer,java.util.ArrayList<java.lang.String>> cannot be applied to (int,boolean)
inventoryMap.put(x,inventoryMap.get(x).add(s));
我认为将String elements
添加到地图my ArrayList<String>
的{{1}}时出错了
你可以指导我可能出错吗?
答案 0 :(得分:2)
if (inventoryMap.containsKey(x)) {
inventoryMap.put(x,inventoryMap.get(x).add(s));
}
使用
更改此设置if (inventoryMap.containsKey(x)) {
inventoryMap.get(x).add(s);
}
原因inventoryMap.get(x).add(s)
将返回布尔值,因此您不能将布尔值替换为List。
由于地图已经包含列表,因此在列表中添加任何元素都不需要在地图中添加任何条目。只需从地图中获取列表并向其添加元素。
答案 1 :(得分:1)
inventoryMap.get(x).add(s)返回布尔值,你试图把它放在地图中。这是异常的原因。将列表放在地图中将解决问题。
答案 2 :(得分:0)
您的代码inventoryMap.get(x).add(s)将值添加到列表并返回一个布尔值。 所以你需要有类似的东西。
List<String> list =inventoryMap.get(x);
list.add(s);
答案 3 :(得分:0)
自add
returns a boolean
以来,您无法将inventoryMap.put(x,inventoryMap.get(x).add(s))
等方法调用链接起来。事实上,您甚至不需要put
声明。由于您不是remove
List
,因此其引用将保留在Map
中,因此对List
的所有更新都将显示。
您需要的只是inventoryMap.get(x).add(s)
。
答案 4 :(得分:0)
首先inventoryMap.get(x).add(s)
返回boolean
(无论是否成功添加的元素)。因此与类型ArrayList<String>
不兼容。你可以简单地做到
inventoryMap.get(x).add(s)
无需显式调用pur()函数。
其次int x = s.length();
应为Integer x = s.length();
。你可以将int放在期望Integer的地方(无论如何你不能在泛型中使用int)。
答案 5 :(得分:0)
这一行的问题
inventoryMap.put(x,inventoryMap.get(x).add(s));
inventoryMap.get(x).add(s)
会返回boolean
,地图在此处需要List
。你需要打破这个说法。像这样的东西:
List<String> stirngsList = inventoryMap.get(x);
stirngsList.add(s);