如何计算ArrayList中每个项目的数量,然后显示它们?

时间:2013-12-08 12:55:10

标签: java arraylist duplicates

我有一个包含多个购物商品条目的ArrayList,包括名称,ID和制造商。我已经看过hashmaps和Collection.frequency但我不确定如何正确使用它们。

例如,当我想查看此人购物车的内容时,它目前以以下格式显示内容:

item id:12345 | red t-shirt  | Brand 1 | $30.00
item id:54321 | blue t-shirt | Brand 2 | $35.00
item id:12345 | red t-shirt  | Brand 1 | $30.00

我想列出该ArrayList中的所有项目,但将这些条目显示为:

item id:12345 | red t-shirt  | Brand 1  | $30.00  | x2
item id:54321 | blue t-shirt | Brand 2  | $35.00  | x1

有人可以指出我正确的方向,我如何获取ArrayList中每个项目的数量,并显示每个项目的数量?

3 个答案:

答案 0 :(得分:1)

您应该拥有以下课程:

  • 产品(包含ID,描述,品牌,价格)
  • CartItem(含产品,数量)

然后您的购物车可以简单地实现为List<CartItem>,或者,如果您希望能够快速更改给定产品ID的数量,则为Map<Long, CartItem>,其中密钥是产品ID,值是此产品的CartItem:

public void addProductInCart(Product product, int quantity) {
    CartItem item = map.get(product.getId());
    if (item == null) {
        item = new CartItem(product, quantity);
        map.put(product.getId(), item);
    }
    else {
        item.addQuantity(quantity);
    }
}

答案 1 :(得分:0)

  • 创建HashMap
  • 迭代你的名单和
    • 添加条目(如果不存在),值为1
    • 如果现在增加值
  • 最后迭代抛出你的HashMap(有一个EntrySet迭代器)并打印你的ShoppingEntry(Key)和Amount(Value)

答案 2 :(得分:-1)

要解决您的问题,您应该按照以下步骤操作。

  1. 创建一个名为Item的类,并正确覆盖equals和hashCode。

    public class Item {
    
    private Integer id;
    private String name;
    private String brand;
    private Double price;
    
    public Item(Integer id, String name, String brand, Double price) {
        //...
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Item)) {
            return false;
        }
    
        Item other = (Item) obj;
        return this.id.equals(other.id)
                && this.name.equals(other.name)
                && this.brand.equals(other.brand)
                && this.price == other.price;
    }
    
    @Override
    public int hashCode() {
        return 31 * this.id.hashCode()
                + this.name.hashCode()
                + this.brand.hashCode() 
                + this.price.hashCode();
    }    
    
     @Override
     public String toString() {
     return String.format("item id:%d | %s  | %s  | $%f",
                              id, name, brand, price);
     }
    }
    
  2. 创建一个HashMap来计算列表中的项目。

    Map<Item, Integer> map = new HashMap<>();
    List<Item> list = new ArrayList<>();
    list.add(new Item(12345, "red t-shirt", "Brand 1", 30.00));
    list.add(new Item(54321, "blue t-shirt", "Brand 2", 50.00));
    list.add(new Item(12345, "red t-shirt", "Brand 1", 30.00));
    
    for (Item item : list) {
        Integer count = map.get(item);
        map.put(item, count == null ? 1 : count + 1);
    
    }