java - 计算映射中的类实例

标签 java hashmap

我有一个购物网站,其中的商品可以添加到购物篮中,每个商品都是 Product 类的一个实例,所有商品都存储在 Collection<Product> 中。项目,

我目前正在迭代该列表并在表中显示每个项目。

但是我想显示每个项目的数量值。

我创建了一个 Map ,并试图将我的每一个产品都放进去。

但是,每个产品仍然被列为仅存在一次,因为每个类实例都不同?
我该如何调整这个?

我的产品类别有一个产品 ID 值。这是我目前拥有的代码。

Map<Product, Integer> map = new HashMap<>();
for (Product p : items) {
    Integer i = map.get(p);
    if (i == null) {
        map.put(p, 1);
    }
    else {
        map.put(p, i+1);
    }
}

已经实现了 hashcode 和 equals 方法。

尝试将项目添加到 map 。

Collection<Product> items = basket.getItems();
    Map<Product, Integer> map = new HashMap<>();
    for (Product p : items) {
        for (Product key : map.keySet()) {
            if (p.equals(key)) {
                map.put(key, map.get(key));
            }
            else {
                map.put(p, 1);
            }
        }
    }

最佳答案

However each Product is still listed as only existing once because each class instance is different?

是的。

HashMap 通过使用 hashcode()equals() 的实现来标识键。

您可以使用一个属性,该属性已经正确实现了两者(如 @zsmb13 建议),或者您创建了 hashcode()equals() 的实现在你的 Product 类中(注意!不要继承它们!它们必须在一个不会扩展自身的体面的子类中实现......)。

关于java - 计算映射中的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42832310/

相关文章:

java - RememberMe Spring 安全 : success handler is called multiple times

java - Javascript 和 Java 中的参数

java - Android:没有预览就拍照:java.lang.RuntimeException:takePicture 失败

java - 如何使用 Map 元素作为 JComboBox 的文本

java:连接数组列表中的所有 HashMap

java - 将字符串打印到 java.io.Console 对象

java - 这在 Java : Map<SomeObject, Map<SomeOtherObject>> 中可能吗?

java - Java中HashMap的解析

java - 2D HashMap 的使用

java - 我对 HashMap 的理解正确吗?