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就是这样做的。