我有一个简单的问题要问你,我的 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,类别=CCTV,符号=TVC-DS,desc=简单相机,价格=100.00,数量=1产品:id=1,类别=CCTV,符号=TVC-DS,desc=简单相机,价格=100.00,数量=3
不会添加到集合中
my code:
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);
}
}
}
}
All Set
实现删除重复项,并且LinkedHashSet
也不例外。
重复的定义是两个对象彼此相等,根据它们的equals()
方法。如果你还没有覆盖equals
在你的Product
类,那么只有相同的引用才会被视为相等,而不是具有相同值的不同实例。
所以你需要添加一个更具体的实现equals
(and hashcode
)为你的班级。有关一些示例和指导,请参阅在 Java 中重写 equals 和 hashcode。 (请注意,您must覆盖hashcode
同样,否则你的类在哈希集中将无法正确运行。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)