首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在循环中删除ArrayList中的元素

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

Stack Overflow用户
提问于 2020-02-18 10:28:11
回答 2查看 128关注 0票数 0

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

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

代码语言:javascript
运行
复制
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());
    }

但这不管用。

EN

回答 2

Stack Overflow用户

发布于 2020-02-18 12:43:29

你只需要做一件事

代码语言:javascript
运行
复制
 listA.retainAll(listB);

现在来看listA contains only similar elements in both ListA and ListB

示例:

代码语言:javascript
运行
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2020-02-18 13:04:29

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

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

下面是一个简单的实现

代码语言:javascript
运行
复制
@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(); 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60272928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档