比较两个集合并删除常用项目

我有两组包含一些元素作为对象。 我想从集合中删除公共元素。 如何从集合中删除常用元素?

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的元素正常运行,它必须覆盖equalshashCode方法,并且任何两个相等的AcceptorInventory必须具有相同的hashCode

您可以使用当前saveList删除常用项目

 saveList.removeAll(updateList);