尝试将一组项添加到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>
<%
}
%>
我设法在打印集合时使用它,但没有使用地图。
答案 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);
}
}