我正在使用Java 6.我无法弄清楚为什么“retainAll”没有正确计算两组的交集。我有
for (ProductDto dtoProd : dto.getProducts())
{
System.out.println("dtoProd:" + dtoProd.getId());
} // for
for (ProductDto princProd : principal.getProducts())
{
System.out.println("princProd:" + princProd.getId());
} // for
dto.getProducts().retainAll(principal.getProducts());
尽管我通过我的System.out观察到我在两个集合中都有相同的产品,但在最后一次调用后,我的“dto.getProducts()”为空。这是相关对象的id和hashcode方法,如果重要的话......
@Override
public int hashCode()
{
return this.id != null ? this.id.hashCode() : 0;
}
@Override
public boolean equals(Object obj)
{
boolean ret = false;
if (obj instanceof ProductDto)
{
final ProductDto other = (ProductDto) obj;
ret = (this.id == other.getId() || (this.id != null && this.id.equals(other.getId())));
}
return ret;
}
这是System.out信息
dtoProd:777
dtoProd:778
dtoProd:110074257z
princProd:777
princProd:777SB
princProd:110074257z
princProd:110074258z
princProd:110074259z
princProd:6161
princProd:778
我还需要做些什么来计算正确的交叉点?