比较阵列列表的某些属性并记录重复项



我有一个 Detail class,我正在为 ArrayList<Detail>()添加详细对象。每个Detail对象都有不同的行号。我想要的是比较详细对象的某些 propeties 记录消息如果在列表中找到了重复,并且>删除重复>从列表中。我在细节类中覆盖了 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;
        }  

您需要使用所有元素,然后使用add方法将它们添加到Set<Details>,一个

如果add方法在插入Details对象时返回false,则意味着Detail对象是重复的,您可以 log> log it

将所有项目添加到Set之后,Set包含 unique Details Elements

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

编辑:如果您希望在Details的完全不同的属性上找到重复,而不是您在equals中使用的副本,则首先

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

有关更多信息,请阅读TreeSet的文档,以查找其如何查找重复/equality

最新更新