Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 在循环中删除ArrayList中的元素_Java_Arraylist - Fatal编程技术网

Java 在循环中删除ArrayList中的元素

Java 在循环中删除ArrayList中的元素,java,arraylist,Java,Arraylist,我需要帮助。我试图从ArrayList中删除一个元素。 我有两张单子。一个列表来自文件,第二个列表来自数据库 我需要找到相同的元素,以便以后从原始列表中删除它们,从而得到一个有差异的列表 List<BinInternacionalMarcaDEL> listDiff = new ArrayList<BinInternacionalMarcaDEL>(); ListOriginal= binInternacionalRepositoryDEL.findAllByBin()

我需要帮助。我试图从
ArrayList
中删除一个元素。 我有两张单子。一个列表来自文件,第二个列表来自数据库

我需要找到相同的元素,以便以后从原始列表中删除它们,从而得到一个有差异的列表

List<BinInternacionalMarcaDEL> listDiff = new ArrayList<BinInternacionalMarcaDEL>();

ListOriginal= binInternacionalRepositoryDEL.findAllByBin();

public  List<BinInternacionalMarcaDEL> Differences(List<BinInternacionalMarcaDEL> listA,
                                                   List<BinInternacionalMarcaDEL> listB) {
    try {
        for(BinInternacionalMarcaDEL elementA: listaA){
            for(BinInternacionalMarcaDEL elementB: listaB) {
                if(elementA.getNumRangoini().compareTo(elementB.getNumRangoini()) == 0 ){
                    listDiff.add(elementA);
                }
            }
        }
        ListOriginal.removeAll(listDiff);
    } catch (Exception e) {
        LOGGER.error(e.toString());
    }
List listDiff=new ArrayList();
ListOriginal=bin国际存储库del.findAllByBin();
公共列表差异(列表A,
名单(b){
试一试{
适用于(BINInternationalMarcadel elementA:listaA){
对于(BINInternationalMarcadel元素B:listaB){
if(elementA.getNumRangoini().compareTo(elementB.getNumRangoini())==0){
列表差异添加(元素a);
}
}
}
ListOriginal.removeAll(listDiff);
}捕获(例外e){
LOGGER.error(例如toString());
}

但是这不起作用。

你可以做一件事

 listA.retainAll(listB);
现在这里
listA在listA和ListB中只包含相似的元素

示例:

List<String> listA =  new ArrayList<>(Arrays.asList("12","13","15","2","5")) ;   
List<String> listB =  new ArrayList<> (Arrays.asList("2","12","48","49","55"));
listA .retainAll(listB );
System.out.println(listA ); //[12, 2]
listA=newarraylist(Arrays.asList(“12”、“13”、“15”、“2”、“5”));
List listB=新的ArrayList(Arrays.asList(“2”、“12”、“48”、“49”、“55”));
listA.Retainal(listB);
System.out.println(listA);//[12,2]

只要你能做一件事

 listA.retainAll(listB);
现在这里
listA在listA和ListB中只包含相似的元素

示例:

List<String> listA =  new ArrayList<>(Arrays.asList("12","13","15","2","5")) ;   
List<String> listB =  new ArrayList<> (Arrays.asList("2","12","48","49","55"));
listA .retainAll(listB );
System.out.println(listA ); //[12, 2]
listA=newarraylist(Arrays.asList(“12”、“13”、“15”、“2”、“5”));
List listB=新的ArrayList(Arrays.asList(“2”、“12”、“48”、“49”、“55”));
listA.Retainal(listB);
System.out.println(listA);//[12,2]

Java list remove and contains方法使用对象的相等性实现。此逻辑在类中的hashCode和相等方法中实现,Java中的所有类都从对象类继承此属性。(老实说,ArrayList在实现remove和contains methods时不使用hashCode,但在java contract中,您应该同时实现这两个方法)。在这里,当您向listDiff添加元素时,您正在定义自己的等式,它基于属性numRangoini的等式(使用compateTo方法)当您请求list类将它们从list中删除时(使用removeAll方法)。removeAll将根据这两个对象的相等性删除它们。因为您尚未在自己的类中定义此逻辑。 此行为继承自基于严格相等的对象类。默认情况下,如果两个对象引用同一对象,则两个对象相等

解决方案:在equal方法中定义您自己的类中的相等逻辑。如果两个对象具有相同的属性值numRangoini,则此方法应返回true。不要忘记定义hashCode。下面是规则,如果两个对象相等,则应返回相同的hashCode

下面是一个简单的实现

@Override
public boolean equals(Object obj) { 
    if(this == obj) 
        return true;  
    if(obj == null || obj.getClass()!= this.getClass()) 
        return false; 
    BinInternacionalMarcaDEL  binInternacionalMarcaDEL  = (BinInternacionalMarcaDEL)obj;
    return (national.getNumRangoini().compareTo(this.getNumRangoini()) == 0); 
} 



@Override
public int hashCode() { 
   return this.getNumRangoini().intValue(); 
}

Java list remove和contains方法使用对象的相等性实现。此逻辑在类中的hashCode和相等方法中实现,Java中的所有类都从对象类继承此属性。(老实说,ArrayList在实现remove和contains methods时不使用hashCode,但在java contract中,您应该同时实现这两个方法)。在这里,当您向listDiff添加元素时,您正在定义自己的等式,它基于属性numRangoini的等式(使用compateTo方法)当您请求list类将它们从list中删除时(使用removeAll方法)。removeAll将根据这两个对象的相等性删除它们。因为您尚未在自己的类中定义此逻辑。 此行为继承自基于严格相等的对象类。默认情况下,如果两个对象引用同一对象,则两个对象相等

解决方案:在equal方法中定义您自己的类中的相等逻辑。如果两个对象具有相同的属性值numRangoini,则此方法应返回true。不要忘记定义hashCode。下面是规则,如果两个对象相等,则应返回相同的hashCode

下面是一个简单的实现

@Override
public boolean equals(Object obj) { 
    if(this == obj) 
        return true;  
    if(obj == null || obj.getClass()!= this.getClass()) 
        return false; 
    BinInternacionalMarcaDEL  binInternacionalMarcaDEL  = (BinInternacionalMarcaDEL)obj;
    return (national.getNumRangoini().compareTo(this.getNumRangoini()) == 0); 
} 



@Override
public int hashCode() { 
   return this.getNumRangoini().intValue(); 
}

NumRangoini的类型是什么?这个问题有帮助吗?NumRangoini是一个大整数,BINInternationalMarcadel类有两个大整数:NumRangoini和NumRangoFin,即“如果”正在工作,问题已经解决。您是否可以在问题中添加listDiff和ListOriginal的声明?您是否得到不可修改的异常?NumRangoini的类型是什么?这是否有帮助?NumRangoini是一个大整数,BinInternacionalMarcaDEL类有两个大整数:NumRangoini和NumRangoFin,即“IF”正在工作,问题已解决。您是否可以在问题中添加listDiff和ListOriginal的声明?是否获得不可修改的异常?类BinInternacialMarcadel还应实现equals和hashCode。您的示例很有效,因为String实现了这一点。类BinInternacialMarcadel还应实现equals和hashCode。您的示例是有效的,因为String就是这样做的。