gpt4 book ai didi

java - LinkedHashSet 去除重复对象

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:19 25 4
gpt4 key购买 nike

我有一个简单的问题要问你,我的 Product 类有这样的字段:

private Integer id;
private String category;
private String symbol;
private String desc;
private Double price;
private Integer quantity;

我想根据 ID 从 LinkedHasSet 中删除重复项目,例如,具有相同 ID 但数量不同的产品将添加到集合中,我想删除(更新)具有相同 ID 的产品,它将通过我的唯一 ID对象,怎么做?

例如产品:id=1,category=CCTV,symbol=TVC-DS,desc=Simple Camera,price=100.00,quantity=1产品:id=1,category=CCTV,symbol=TVC-DS,desc=Simple Camera,price=100.00,quantity=3

不会添加到集合中

我的代码:

    public void setList(Set<Product> list) {
if(list.isEmpty())
this.list = list;
else {
this.list.addAll(list);
Iterator<Product> it = this.list.iterator();
for(Product p : list) {
while(it.hasNext()) {
if(it.next().getId() != p.getId())
it.remove();
this.list.add(p);
}
}
}
}

最佳答案

所有 Set 实现都会删除重复项,LinkedHashSet 也不异常(exception)。

duplicate 的定义是根据它们的 equals() 方法,两个对象彼此相等。如果您没有在 Product 类上覆盖 equals,则只有相同的引用才会被视为相等 - 而不是具有相同值的不同实例。

因此您需要为您的类添加更具体的equals(和hashcode)实现。有关一些示例和指南,请参阅 Overriding equals and hashcode in Java . (请注意,您必须也覆盖hashcode,否则您的类将无法在哈希集中正常运行。)

关于java - LinkedHashSet 去除重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14748095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com