Java:RemoveAll(集合c)返回false
在我的java代码中,我有两个Java:RemoveAll(集合c)返回false,java,list,collections,removeall,Java,List,Collections,Removeall,在我的java代码中,我有两个arrayList一个是assignedRiders,另一个是nearestRiders,我想从nearestRiders列表中删除元素,如果它也存在于assignedRiders中,对于这一点,我使用了下面的行,但当我运行它时,它返回false,即使它们有相同的元素 代码 List<User> nearestRiders=new ArrayList<User>(); List<User> assignedRiders=new A
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);
List nearestRiders=new ArrayList();
List assignedRiders=new ArrayList();
nearestRiders=riderLocationRepo.findNearestRiderList(orderRequest.getLatitudeShop(),
orderRequest.getLongitudeShop());
assignedRiders=orderAlredayAssigned();
Boolean dataChanhged=nearestRiders.removeAll(assignedRiders);
您可以这样做:
for(User u : nearestRiders){
assignedRRiders.remove(u)}
如果这些列表中的对象具有相等的值,则它们不一定相等 removeAll的源代码
public boolean removeAll(Collection<?> c) {
boolean modified = false;
Iterator<?> e = iterator();
while (e.hasNext()) {
if (c.contains(e.next())) {
e.remove();
modified = true;
}
}
return modified;
}
public boolean removeAll(集合c){
布尔修改=假;
迭代器e=迭代器();
while(e.hasNext()){
if(c.contains(e.next())){
e、 删除();
修改=真;
}
}
修改返回值;
}
它调用contains,contains调用equalTo。这意味着您可以在要删除的对象类中重写equalTo,以检查GUID等特定值。您的用户类是否重写equals和hashcode?@OHGODSPIDERS NoBecause列表操作,如remove、removeAll、,包含等。都使用equals方法确定两个元素是否相同。如果不实现这些方法,则两个用户列表将使用内存地址进行比较,而不是使用它们的值。因此,例如,如果OrderalReadyAsigned()方法要访问数据库,而您的nearestRiders来自一个文件(例如),那么公共附加程序实际上是同一个对象,只是具有相同的值