当前位置: 首页 > 知识库问答 >
问题:

在arraylist java中删除重复项

冯卜鹰
2023-03-14

我需要编写一个逻辑来检查一个列表是否有任何重复项,如果有,它会删除它们,并返回一个新的列表,其中包含没有重复/删除的项。下面是我尝试过但没有成功的方法。

CustomerResponse response = service.callGetDetails(id,name);
List <Customer> responseList = response.getCustomerList();
CustomerResponse response1 = service.callGetDetails(id,name);
responseList.addAll(response1.getCustomerList());

Customer.java:

public class Customer{

@JsonProperty("id")
private String id;

@JsonProperty("startDate")
private String id;

@JsonProperty("abcAccount")
private AbcAccount abcAccount;

@JsonProperty("accPaList")
private List<AccPaList> accPaList;

//Added getter and setter

@Override
public int hashCode(){
    final int prime=31;
    int result = 1;
    result = prime * result + ((abcAccount ==null))? 0 : abcAccount.hashCode());
    result = prime * result + ((accPaList ==null))? 0 : accPaList.hashCode());
    result = prime * result + ((id ==null))? 0 : id.hashCode());
    result = prime * result + ((startDate ==null))? 0 : startDate.hashCode());
    return result;
}

@Override
public boolean equals(Object obj){
    if(this == obj)
        return true;
    if(obj == null)
        return false;
    if(getClass() != obj.getClass())
        return false;
    Customer other = (Customer) obj;
    if(abcAccount ==null){
        if(other.abcAccount !=null)
            return false;
    } else if (!abcAccount.equals(other.abcAccount))
        return false;
    if(accPaList ==null){
        if(other.accPaList !=null)
            return false;
    } else if (!accPaList.equals(other.accPaList))
        return false;
    if(id ==null){
        if(other.id !=null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    if(startDate ==null){
        if(other.startDate !=null)
            return false;
    } else if (!startDate.equals(other.startDate))
        return false;
    return true;
}
}

以下是添加后的响应列表:

{
"customerList":[
        {
        "id":"123",
        "startDate":"2022-01-29",
        "abcAccount":{
            "acct":"123",
            "acctCurrency":"USD"
            },
            "accPaList":[
                {
                    "headAcc":{
                        "act":"67890",
                        "acctCurrency":"USD"
                    },
                    "souAcc":{
                        "act":"5678",
                        "acctCurrency":"USD"
                    },
                    "accPaDetails":{
                        "id":"C012",
                        "version":"12"
                    },
                    "posting":"Direct"
                }
            ],
            "type":"EDA"
        },
        {
        "id":"123",
        "startDate":"2022-01-29",
        "abcAccount":{
            "acct":"123",
            "acctCurrency":"USD"
            },
            "accPaList":[
                {
                    "headAcc":{
                        "act":"67890",
                        "acctCurrency":"USD"
                    },
                    "souAcc":{
                        "act":"5678",
                        "acctCurrency":"USD"
                    },
                    "accPaDetails":{
                        "id":"C012",
                        "version":"12"
                    },
                    "posting":"Direct"
                }
            ],
            "type":"EDA"
        },
        {
        "id":"456",
        "startDate":"2022-01-29",
        "abcAccount":{
            "acct":"321",
            "acctCurrency":"CAD"
            },
            "accPaList":[
                {
                    "headAcc":{
                        "act":"76899",
                        "acctCurrency":"CAD"
                    },
                    "souAcc":{
                        "act":"8765",
                        "acctCurrency":"CAD"
                    },
                    "accPaDetails":{
                        "id":"C022",
                        "version":"15"
                    },
                    "posting":"Direct"
                }
            ],
            "type":"EDA"
        }
    ]
} 

在上面列出两个具有相同细节的对象的情况下,(即)["id": 123]是重复的。我在所有对象中添加了String(),equals(),hashcode(),并将其传递给hashSet

responseList= new ArrayList<>(new HashSet <Customer>(responseList));

但我得到了相同的对象后,传递到集,重复不被删除。

请帮忙。我在论坛上查看了它,尝试了很多案例,但都没有效果。

共有2个答案

秦永望
2023-03-14

您是否也为AbcAccountAccPaList类实现了equals()和hashcode()?

万俟渝
2023-03-14

您关于通过Set传递它的想法是正确的,因为添加一个等于包含的对象之一的对象不会导致任何更改。所以罪魁祸首很可能是您实现的equals()方法。请确保此方法为您定义为相等的对象返回true,否则返回false。如果写入正确,那么您的集合将过滤掉所有重复。实现toString()方法是不必要的。

 类似资料:
  • 问题内容: 我有这样的桌子 我想执行一个查询,以除去所有最新的重复项。我希望你有个主意吗? 例如,查询后的表必须是这样的 问题答案: 语法可能需要调整,但是应该做到这一点。此外,您可能希望将子查询预查询到其自己的表FIRST中,然后对该结果集运行DELETE FROM。

  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 问题内容: 我有一个表,该表由id(key),符号,方向,范围,价格,百分比列组成。我想删除符号,方向,价格和百分比相同且范围最小的数据。我将如何完成? 我一直在尝试改变这种说法:使某些东西起作用。 问题答案: 这是 aw 表的样本数据。根据您的描述,我认为您想丢弃值分别为2、3和5的行。 确定的每个组合的最小范围值,,,和。 qryMinRanges : …给出以下结果集: 确定这些最小范围中的

  • 问题内容: 我有一个包含以下字段的表: 现在,我需要删除具有same的行。一种方法是使用以下SQL以及脚本( ): 运行此查询后,我可以使用服务器端脚本删除重复项。 但是,我想知道是否只能使用SQL查询来完成。 问题答案: 一种简单的方法是在3列上添加索引。在编写语句时,请包含关键字。像这样: 这将删除所有重复的行。作为一项额外的好处,重复的将来会出错。和往常一样,您可能需要在运行类似内容之前进行

  • 问题内容: 我有一个自定义对象的ArrayList。我要删除重复的条目。 对象具有三个字段:和。如果字幕多次出现,那么我只需要带有thats字幕的第一项(忽略带有该字幕的其余对象)。 问题答案: 您可以使用自定义Comparator将ArrayList的内容放入TreeSet中,如果两个字幕相同,则应返回0。之后,您可以将Set转换为列表,并使列表中没有“重复项”。这是对象的示例,您当然应该使用正

  • 问题内容: 数据库类型为PostGres 8.3。 如果我写了: 我有一些计数超过1的行。如何取出重复的行(我仍然希望每个行都保留1行,而不是+1行…我不想删除所有行。) 例子: 应该变成: 我找到的唯一答案是 在那里,但是我想知道是否可以在没有哈希列的情况下做到这一点。 警告 我没有具有唯一编号的PK,因此无法使用min(…)技术。PK是3个字段。 问题答案: 这是所有表都应具有主键的众多原因之