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

标签 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));
        }
    }

我的项目是用

创建的
public class Items 
{
    private String name;

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

    public String toString()
    {
        return name;
    }

    public String getName()
    {
        return name;
    }

}

在 Main 中,我会创建项目,并将它们添加到购物车,然后是 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);

我明白了

1x White Bread
1x White Bread
1x White Bread
1x White Bread 

代替

4x White Bread

我做错了什么?

最佳答案

改变

itemsMap.replace(ShoppingCart.get(i).getName(), a, a++);

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

使用后递减 (a++) 不会修改 Map 中的值,因为 a++ 返回 a 的原始值。

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

关于java - 计算列表中元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019859/

相关文章:

java - HashMap<String, ArrayList>,根据 Key 为 ArrayList 添加新值

Java 子字符串正在将我的正索引切换为负索引

java - 这个二进制文档是什么意思?

尽管 hashcode 不同,但 Java 对象是相等的

java - 在java中填充列表的列表

java - 通过获取用户的输入来使用 Map<Integer,Integer>

java - 双击 JAR 文件不会打开命令提示符

mysql - 显示表 MySQL 结果的别名

python - 将双端队列对象转换为列表

java - HashMap 对象键