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