【发布时间】:2018-05-17 21:56:57
【问题描述】:
在我的Java代码中,我有两个arrayList,一个是assignedRiders,另一个是nearestRiders,如果nearestRiders列表中也存在assignedRiders中的元素,我想删除它,为此我使用了以下行,但是当我运行它时,即使它们具有相同的元素,它也会返回 false
代码
List<User> nearestRiders=new ArrayList<User>();
List<User> assignedRiders=new ArrayList<User>();
nearestRiders=riderLocationRepo.findNearestRiderList(orderRequest.getLatitudeShop(),
orderRequest.getLongitudeShop());
assignedRiders=orderAlredayAssigned();
Boolean dataChanhged=nearestRiders.removeAll(assignedRiders);
【问题讨论】:
-
你的 User 类是否覆盖了 equals 和 hashcode?span>
-
@OHGODSPIDERS 不
-
因为移除、removeAll、包含等List操作都使用equals方法判断两个元素是否相同。
-
如果您不实现这些方法,您的两个用户列表将使用内存地址进行比较,而不是它们的值。因此,例如,如果您的 orderAlreadyAssigned() 方法将访问数据库,而您的nearestRiders 来自文件(例如),则常见的骑手实际上是同一个对象,只是具有相同的值。
标签: java list collections removeall