如何向HashMap添加元素,其键是Integer,值是Java中的arraylist?

时间:2013-07-19 03:34:14

标签: java constructor arraylist hashmap

我正在编写一个类,其构造函数采用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}}时出错了 你可以指导我可能出错吗?

6 个答案:

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