计算列表中元素的出现次数

Jin*_*bug 1 java list hashmap

我正在尝试列出一个列表,我将把项目添加到我的购物车中,然后在结账时它将通过使用HashMap显示有多少项目出现.

public class ShoppingCart 
{
    private ArrayList<Items> ShoppingCart;

    public ShoppingCart()
    {
        ShoppingCart = new ArrayList<Items>();
    }

    public void addItems(Items newItems)
    {
        ShoppingCart.add(newItems);
    }

    public ArrayList<Items> getShoppingCart()
    {
        return ShoppingCart;
    }

    public void CheckOut()
    {
        for(int i = 0; i < ShoppingCart.size(); i++)
        {
                HashMap<String, Integer> itemsMap = new HashMap<String, Integer>();
                int a = 1;

                if (itemsMap.containsKey(ShoppingCart.get(i).getName()))
                {
                    itemsMap.replace(ShoppingCart.get(i).getName(), a, a++);
                } 
                else 
                {
                    itemsMap.put(ShoppingCart.get(i).getName(), a);
                }
            System.out.println(a +"x "+ShoppingCart.get(i));
        }
    }
Run Code Online (Sandbox Code Playgroud)

和我的项目是用

public class Items 
{
    private String name;

    public Items (String name)
    {
        this.name = name;
    }

    public String toString()
    {
        return name;
    }

    public String getName()
    {
        return name;
    }

}
Run Code Online (Sandbox Code Playgroud)

在Main中,我将创建Items,并将它们添加到购物车,然后ShoppingCart.CheckOut(); 我的物品.

但是,如果我这样添加4个"白面包",

    Items bread = new Items("White Bread");

    ShoppingCart ShoppingCart = new ShoppingCart();

    ShoppingCart.addItems(bread);
    ShoppingCart.addItems(bread);
    ShoppingCart.addItems(bread);
    ShoppingCart.addItems(bread);
Run Code Online (Sandbox Code Playgroud)

我明白了

1x White Bread
1x White Bread
1x White Bread
1x White Bread 
Run Code Online (Sandbox Code Playgroud)

代替

4x White Bread
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Era*_*ran 5

更改

itemsMap.replace(ShoppingCart.get(i).getName(), a, a++);
Run Code Online (Sandbox Code Playgroud)

a = itemsMap.get(ShoppingCart.get(i).getName()); // in order to increment the 
                                                 // current counter value
itemsMap.replace(ShoppingCart.get(i).getName(), a, ++a);
Run Code Online (Sandbox Code Playgroud)

使用post decrement(a++)不会修改Map中的值,因为a++返回原始值a.

另外,HashMap应该在循环外初始化.否则它将始终只包含一个元素.

  • `HashMap <String,Integer> itemsMap = new HashMap <String,Integer>(); `也应该在循环之外 (2认同)