繁体   English   中英

如何在Java中将键添加为Integer并且值为arraylist的HashMap中添加元素?

[英]how to add elements to HashMap whose key is Integer and value is arraylist in Java?

我正在写一个类,该类的构造函数使用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>中是错误的,这是Map的value ,您可以指导我解决我可能出错的问题吗?

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。

由于地图已经包含列表,因此在列表中添加任何元素都不需要在地图中放置任何条目。 只需从地图中获取列表,然后向其中添加元素即可。

ventoryMap.get(x).add(s)返回布尔值,并且您试图将其放入地图中。 这是导致异常的原因。 将列表放在地图中将解决此问题。

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

List<String> list =inventoryMap.get(x);
list.add(s);

由于add返回一个boolean inventoryMap.put(x,inventoryMap.get(x).add(s))因此无法链接方法类调用,例如inventoryMap.put(x,inventoryMap.get(x).add(s)) 实际上,您甚至不需要put语句。 由于您没有remove List ,因此其引用将保留在Map因此对List任何更新都将可见。

您所需要的只是inventoryMap.get(x).add(s)

首先, 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)。

这条线的问题

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

inventoryMap.get(x).add(s)将返回一个boolean并且map期望在此处有一个List 您需要分解此语句。 像这样的东西:

List<String> stirngsList = inventoryMap.get(x);
stirngsList.add(s);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM