访问散列映射中的arraylist中的值并编辑该值

时间:2017-03-20 01:28:54

标签: java hashmap

尝试将一组项添加到String类型的hashmap中。 我遍历集合,如果值不在hashmap中,我将它添加到地图中,如果是,我将数量增加1而不是再次添加。到目前为止,这是我的代码。

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
Collection items1 = basket.getItems();
for (Iterator i = items1.iterator(); i.hasNext(); ) {
    Product p = (Product) i.next();
    if(map.containsKey(p.title)) {;
    }
    else {
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(p.price);
        list.add(1);
        map.put(p.title,list);
    }
}

如何访问HashMap内ArrayList中存储的整数并将其递增1?

非常感谢任何帮助,谢谢。

如果我还试图在表格中打印该地图,我将如何遍历地图并打印正确的值。到目前为止,我有这段代码:

    for (Map.Entry<String, String> entry : map.entrySet())
{   
System.out.println(entry.getKey() + "/" + entry.getValue());
ArrayList<Integer> l = map.get(p.title);
%>  

<tr>
    <td> <%out.println(map.getKey);%></td>
    <td> <%out.println(l.get(0);%></td>
    <td> <%out.println(l.get(1));%></td>
</tr>
<%      
}
%>

我设法在打印集合时使用它,但没有使用地图。

3 个答案:

答案 0 :(得分:3)

您需要获取键p.title的值并将1添加到列表中:

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
    Collection items1 = basket.getItems();
    for (Iterator i = items1.iterator(); i.hasNext(); ) {
        Product p = (Product) i.next();

        if(map.containsKey(p.title)) {
            ArrayList<Integer> list = map.get(p.title);
            list.set(1, list.get(1) + 1);
            map.put(p.title, list);
        }
        else {
            ArrayList<Integer> list = new ArrayList<Integer>();
            list.add(p.price);
            list.add(1);
            map.put(p.title,list);
        }
    }

也许你也可以:

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
    Collection items1 = basket.getItems();
    for (Iterator i = items1.iterator(); i.hasNext(); ) {
        Product p = (Product) i.next();

        ArrayList<Integer> list = map.get(p.title);

        if (list == null) {
            list = new ArrayList<Integer>();
            list.add(p.price);
            list.add(1);
        } else {
            list.set(1, list.get(1) + 1);
        }
        map.put(p.title, list);
    }

答案 1 :(得分:0)

这可能会对你有帮助,但我建议你使用arrayList的linkedList insead

  if(map.containsKey(p.title)) {
  ArrayList<Integer> list=map.get(p.title);
  list.get(1)=list.get(1)+1;
  map.put(p.title,list);
}

答案 2 :(得分:0)

我认为应该这样做。

如果地图中有匹配的键,则需要检索ArrayList,并在列表中的第二个索引中增加整数,因为您已将产品价格存储在第一个索引(索引0)中,好像你想存储&#34;计数&#34;在第二个索引(索引1)。

HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
        Collection items1 = basket.getItems();
        for (Iterator i = items1.iterator(); i.hasNext(); ) {
            Product p = (Product) i.next();
            if(map.containsKey(p.title)) {
                // get the list of the existing product in the hash map
                ArrayList<Integer> listForProduct = map.get(p.title));

                // get one of the integers in the list (the integer at index one, because index zero is the price)
                int intInList = listForP.get(0);

                // increment this integer and put it back at index one in the list
                listForP.add(1, intInList + 1);
            }
            else {
                ArrayList<Integer> list = new ArrayList<Integer>();
                list.add(p.price);
                list.add(1);
                map.put(p.title,list);
            }
        }