Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:RemoveAll(集合c)返回false_Java_List_Collections_Removeall - Fatal编程技术网

Java:RemoveAll(集合c)返回false

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

在我的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);
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来自一个文件(例如),那么公共附加程序实际上是同一个对象,只是具有相同的值