ins*_*ict 5 java collections set
我有一个简单的问题,我有类产品,有这样的字段:
private Integer id;
private String category;
private String symbol;
private String desc;
private Double price;
private Integer quantity;
Run Code Online (Sandbox Code Playgroud)
我想根据ID从LinkedHasSet中删除重复项,例如具有相同ID但不同数量的产品将添加到设置中,我想删除(更新)具有相同ID的产品,并且它将由我唯一的id对象,如何要做到这一点?
例如产品:id = 1,类别= CCTV,符号= TVC-DS,desc =简单相机,价格= 100.00,数量= 1 产品:id = 1,类别= CCTV,符号= TVC-DS,desc =简单相机,价格= 100.00,数量= 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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*yle 15
所有Set实现都删除重复项,LinkedHashSet也不例外.
根据他们的equals()方法,复制的定义是两个彼此相等的对象.如果你没有覆盖equals你的Product类,那么只有相同的引用才会被认为是相同的 - 而不是具有相同值的不同实例.
因此,您需要为您的类添加更具体的equals(和hashcode)实现.有关示例和指导,请参阅在Java中覆盖equals和hashcode.(请注意,您也必须覆盖hashcode,否则您的类在哈希集中将无法正常运行.)
| 归档时间: |
|
| 查看次数: |
14217 次 |
| 最近记录: |