LinkedHashSet删除重复对象
我有一个简单的问题要问,我有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, 产品:id =
1,类别= CCTV,符号= TVC-DS,desc =简易摄像机,价格= 100.00,
不会添加到集合中
我的代码:
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
也不例外。
根据其equals()
方法,重复的定义是两个彼此相等的对象。如果您尚未覆盖equals
您的Product
类,则只有相同的引用才被视为相等-
带有相同值的不同实例将不被视为相等。
因此,您需要为您的类添加更具体的实现equals
(和hashcode
)。有关一些示例和指南,请参阅《在Java中覆盖等于和哈希码》。(请注意,您还 重写hashcode
,否则您的类在哈希集中将无法正确运行。)
以上是 LinkedHashSet删除重复对象 的全部内容, 来源链接: utcz.com/qa/410370.html