我有一个购物网站,其中的商品可以添加到购物篮中,每个商品都是 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/