java - LinkedHashSet 去除重复对象

标签 java collections set

我有一个简单的问题要问你,我的 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/

相关文章:

java - 如何使受管实体具有上下文感知能力?

java - 在 JPA @OneToMany 关系中更新 Set 元素的正确方法?

Javascript:从字符串数组创建字典

Java StringBuilder - append 字符

java - jSTL c :set to set a bean property results in argument type mismatch

java - 我的程序 Android 中出现 NullPointerException

java - 包含对列表

c# - LINQ- "Unable to create constant value of type [type]"?

java - Java排序中的链表实现不起作用

python - 唯一列表(集)到字典