Reputation: 31
I have two sets which contain some elements as object. I want to remove common element from the set. How can I remove common elements from set?
Set<AcceptorInventory> updateList = new HashSet<AcceptorInventory>();
Set<AcceptorInventory> saveList = new HashSet<AcceptorInventory>();
Both sets have some items, the saveList
have duplicated items & I wish to remove duplicated items from saveList
. I tried with foreach
loop, but it did not work.
Sample output:
save 5
save 20
save 50
save 10
update 5
update 10
update 20
AcceptorInventory Hashcode and equals
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + count;
result = prime * result
+ ((currency == null) ? 0 : currency.hashCode());
result = prime * result + ((date == null) ? 0 : date.hashCode());
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + (isCleared ? 1231 : 1237);
result = prime * result
+ ((kioskMachine == null) ? 0 : kioskMachine.hashCode());
result = prime * result + ((time == null) ? 0 : time.hashCode());
long temp;
temp = Double.doubleToLongBits(total);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AcceptorInventory other = (AcceptorInventory) obj;
if (count != other.count)
return false;
if (currency == null) {
if (other.currency != null)
return false;
} else if (!currency.equals(other.currency))
return false;
if (date == null) {
if (other.date != null)
return false;
} else if (!date.equals(other.date))
return false;
if (id != other.id)
return false;
if (isCleared != other.isCleared)
return false;
if (kioskMachine == null) {
if (other.kioskMachine != null)
return false;
} else if (!kioskMachine.equals(other.kioskMachine))
return false;
if (time == null) {
if (other.time != null)
return false;
} else if (!time.equals(other.time))
return false;
if (Double.doubleToLongBits(total) != Double
.doubleToLongBits(other.total))
return false;
return true;
}
Upvotes: 2
Views: 4053
Reputation: 103
You can remove common items from current saveList using
saveList.removeAll(updateList);
Upvotes: 2
Reputation: 393801
updateList.removeAll(saveList);
would remove from updateList
all the elements of saveList
.
If you also want to remove from saveList
the elements of updateList
, you'll have to create a copy of one of the sets first :
Set<AcceptorInventory> copyOfUpdateList = new HashSet<>(updateList);
updateList.removeAll (saveList);
saveList.removeAll (copyOfUpdateList);
Note that in order for your AcceptorInventory
to function properly as an element of a HashSet
it must override the equals
and hashCode
methods, and any two AcceptorInventory
which are equal must have the same hashCode
.
Upvotes: 2