我正在尝试使用ListUtils.subtract(1,2)从另一个列表中减去一个列表的值,但是我注意到这种减法从未发生过,因此我不断获取返回的1中的所有元素。我认为这可能表明存在平等问题,但我的哈希码和equals方法很好。(我认为)

   @Override
    public boolean equals(Object o) {
        if(!(o instanceof Car))
            return false;

        Car ct = (Car) o;

        return this.getManufacturer().equals(ct.getManufacturer())
                && this.getImmat().equals(ct.getImmat())
                && this.getModel().equals(ct.getModel());
    }

@Override
public int hashCode() {
    int hash = 5;
    hash = 71 * hash + (this.model != null ? this.model.hashCode() : 0);
    hash = 71 * hash + (this.immat != null ? this.immat.hashCode() : 0);
    hash = 71 * hash + (this.manufacturer != null ? this.manufacturer.hashCode() : 0);
    return hash;
}


进行减法的代码:

            List <Car> affected = new LinkedList<Car>();

            for(Driver c : tmp)
                affected.add(c.getCar());

           List <Car> allcars = carDAO.findAllCars("order by model");//returns every car

            List<Car> cars = ListUtils.subtract(allcars, affected );


    return cars;


我已经检查了两个列表,它们都很好,但是我无法让ListUtils减去allcar的影响(返回allcars集),导致我出于某种原因考虑equals方法可能是错误的。

最佳答案

getManufacturer()返回一个Manufacturer,并且您没有在其中覆盖.equals和.hashCode,因此,两个具有相同字段的Manufacturer实例将不被视为相等。

这是基于IRC的额外上下文,因此请将其添加到您的问题中,以便对其他人有用。一般规则是,使用测试用例,您将更快地得到准确的答案。

关于java - ListUtils.subtract()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9073120/

10-10 11:57