为什么retainAll不能准确计算两组的交集?

时间:2017-03-01 21:54:53

标签: java set intersection java-6 retain

我正在使用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

我还需要做些什么来计算正确的交叉点?

0 个答案:

没有答案