比较两个集合并删除常用项目
我有两组包含一些元素作为对象。 我想从集合中删除公共元素。 如何从集合中删除常用元素?
Set updateList = new HashSet(); Set saveList = new HashSet();
两个集合都有一些项目, saveList
有重复的项目,我希望从saveList
删除重复的项目。 我尝试使用foreach
循环,但它没有用。
样本输出:
save 5 save 20 save 50 save 10 update 5 update 10 update 20
AcceptorInventory Hashcode和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; }
updateList.removeAll(saveList);
将从updateList
删除saveList
所有元素。
如果您还想从saveList
删除updateList
的元素,则必须首先创建其中一个集的副本:
Set copyOfUpdateList = new HashSet<>(updateList); updateList.removeAll (saveList); saveList.removeAll (copyOfUpdateList);
请注意,为了使您的AcceptorInventory
作为HashSet
的元素正常运行,它必须覆盖equals
和hashCode
方法,并且任何两个相等的AcceptorInventory
必须具有相同的hashCode
。
您可以使用当前saveList删除常用项目
saveList.removeAll(updateList);