0

我正在编写一个类,它的构造函数接受一个List<String>并返回一个哈希图,其长度为字符串key(Integer),其值为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>value

4

6 回答 6

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。

由于地图已经包含列表,因此在列表中添加任何元素您无需在地图中放置任何条目。只需从地图中获取列表并向其中添加元素。

于 2013-07-19T03:40:36.667 回答
1

inventoryMap.get(x).add(s) 返回布尔值,您尝试将其放入地图中。这就是异常的原因。将列表放入地图将解决问题。

于 2013-07-19T03:37:55.683 回答
0

您的代码 inventoryMap.get(x).add(s) 将该值添加到列表中并返回一个布尔值。所以你需要有类似的东西。

List<String> list =inventoryMap.get(x);
list.add(s);
于 2013-07-19T03:38:35.993 回答
0

你不能像inventoryMap.put(x,inventoryMap.get(x).add(s))因为add返回 aboolean那样链接你的方法调用。事实上,你甚至不需要put声明。由于您没有removeing List,因此它的引用将保留在中,Map因此对 的任何更新List都是可见的。

你只需要inventoryMap.get(x).add(s).

于 2013-07-19T03:38:39.867 回答
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 )。

于 2013-07-19T03:40:01.920 回答
0

这条线的问题

        inventoryMap.put(x,inventoryMap.get(x).add(s));

inventoryMap.get(x).add(s)将返回 aboolean并且 map 期望 aList在这里。你需要打破这个陈述。像这样的东西:

List<String> stirngsList = inventoryMap.get(x);
stirngsList.add(s);
于 2013-07-19T03:40:21.607 回答