比较ArrayList的某些属性并记录重复项

时间:2014-01-29 07:06:36

标签: java arraylist

我有一个Detail class,我正在向ArrayList<Detail>()添加详细信息对象。每个Detail对象都有不同的行号。我想要的是比较详情对象的某些 propeties 记录消息如果在列表中找到重复项并且删除重复项从列表中。 我重写了Detail类中的equals()方法,但无法弄清楚下一步该怎么做。

    @Override
        public boolean equals(Object obj) {
            boolean isEqual = false;
            if(obj instanceof Detail){
                if(this.getInsurancePolicyNo().equals(((Detail) obj).getInsurancePolicyNo()) && this.getCertificateNo().equals(((Detail) obj).getCertificateNo()) && this.getInsuredSurname().equals(((Detail) obj).getInsuredSurname()) && this.getInsuredOtherName().equals(((Detail) obj).getInsuredOtherName()) && this.insuredDOB.equals(((Detail) obj).getInsuredDOB())){
                    isEqual = true;
                }
            }
            return isEqual;
        }  

1 个答案:

答案 0 :(得分:1)

您需要使用Set<Details>方法将所有元素添加到add,逐个

如果add方法在插入false对象时返回Details,则表示Detail对象重复,您可以 log

将所有项目添加到Set后,Set包含 唯一 Details元素

注意:此解决方案要求您的Details班级覆盖equals方法

修改:如果您希望在Details的完全不同的属性上找到重复项,而不是equals中使用的重复项,那么首先

  • 定义考虑这些属性的自定义Comparator
  • 使用创建的TreeSet
  • 创建Comparator
  • 现在TreeSet将使用传递的compareTo
  • Comparator方法找到重复项

有关详细信息,请阅读TreeSet的文档,以了解它如何找到重复/相等