I have simple question to you, I have class Product that have fields like this:
private Integer id;
private String category;
private String symbol;
private String desc;
private Double price;
private Integer quantity;
I want to remove duplicates item from LinkedHasSet based on ID, e.g Products that have same ID but diffrent quantity will be add to set, I want to remove (update) products with same ID, and it will by my unique id of object, how to do that?
e.g
Product: id=1, category=CCTV, symbol=TVC-DS, desc=Simple Camera, price=100.00, quantity=1
Product: id=1, category=CCTV, symbol=TVC-DS, desc=Simple Camera, price=100.00, quantity=3
won’t be added to set
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
Setimplementations remove duplicates, and theLinkedHashSetis no exception.The definition of duplicate is two objects that are equal to each other, according to their
equals()method. If you haven’t overriddenequalson yourProductclass, then only identical references will be considered equal – not different instances with the same values.So you need to add a more specific implementation of
equals(andhashcode) for your class. For some examples and guidance, see Overriding equals and hashcode in Java. (Note that you must overridehashcodeas well, otherwise your class will not behave correctly in hash sets.)