Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算映射中的类实例_Java_Hashmap - Fatal编程技术网

Java 计算映射中的类实例

Java 计算映射中的类实例,java,hashmap,Java,Hashmap,我有一个购物网站,其中的物品可以添加到购物篮中,每个物品都是一个类产品的实例,所有物品都存储在集合中物品 我目前正在遍历该列表,并在表中显示每个项目 但是,我希望为每个项目显示数量值 我创建了一个地图,并尝试将我的每一个产品都放入其中 但是,由于每个类实例不同,每个产品仍然只列出一次? 我该如何调整 我的产品类有一个产品ID值。这是我目前拥有的代码 Map<Product, Integer> map = new HashMap<>(); for (Product p :

我有一个购物网站,其中的物品可以添加到购物篮中,每个物品都是一个类产品的实例,所有物品都存储在
集合中
物品

我目前正在遍历该列表,并在表中显示每个项目

但是,我希望为每个项目显示数量值

我创建了一个
地图
,并尝试将我的每一个产品都放入其中

但是,由于每个类实例不同,每个产品仍然只列出一次?
我该如何调整

我的产品类有一个产品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);
    }
}
Map Map=newhashmap();
用于(产品p:项目){
整数i=map.get(p);
如果(i==null){
map.put(p,1);
}
否则{
map.put(p,i+1);
}
}
已经实现了hashcode和equals方法

正在尝试将项目添加到地图

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);
            }
        }
    }
Collection items=basket.getItems();
Map Map=newhashmap();
用于(产品p:项目){
for(产品密钥:map.keySet()){
如果(p.equals(key)){
map.put(key,map.get(key));
}
否则{
map.put(p,1);
}
}
}
但是,每个产品仍然只列出一次,因为每个类实例是不同的

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


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

您需要重写Product类的
equals
hashCode
,以使基于哈希的操作正常运行。您需要这样的产品类

class Product{

    private int price;
    private String name;

    public Product(String itm, int pr){
        this.name = itm;
        this.price = pr;
    }

    public int hashCode(){
        int hashcode = 0;
        hashcode = price*20;
        hashcode += name.hashCode();
        return hashcode;
    }

    public boolean equals(Object obj){
        if (obj instanceof Product) {
            Product pp = (Product) obj;
            return (pp.name.equals(this.name) && pp.price == this.price);
        } else {
            return false;
        }
    }
}

如何在地图中添加两个等效的
产品
?是不同的实例吗?如果是,您是否实现了
equals
hashCode()
,以便能够比较两个不同的实例?在代码中,这个
项目是什么?编辑:不,@SeanPatrickFloyd在我验证之前写下它^^^我建议您实际创建一个CartItem类,它封装了产品和数量。您想要这个吗?map.put(p,i+p.getQuantity());可能的重复我是否正确理解哈希代码应该通过散列两个唯一可识别的值来返回一个值,因此如果我散列产品id及其标题,则具有相同产品的每个类实例将因此具有相同的哈希代码?谢谢!然后,如何使用它来迭代我的产品实例集合,并在它们相等时将它们添加到映射中?我会把我尝试过的东西贴在op上。