Java Treeset 未使用自定义 CompareTo 删除重复的用户定义对象

问题描述 投票:0回答:1

我尝试删除重复的对象,当 _id 相同或电子邮件相同时重复

我的自定义比较:

 @Override
    public int compareTo(Lead other) {
         
        // Compare by ID first
        int idComparison = this._id.compareTo(other._id);
        if (idComparison != 0) {
            return idComparison;
        }
        
        int emailComparison = this.email.compareTo(other.email);
        if (emailComparison != 0) {
                return emailComparison;
       }

        
        // If IDs are the same, compare by date (latest first)
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
            Date date1 = dateFormat.parse( this.entryDate);
            Date date2 = dateFormat.parse( other.entryDate);

            return date1.compareTo(date2);
        } catch (ParseException e) {

            return 0; // Handle parsing errors appropriately
        }

我的声明和初始化

 // convert the JSON data to a Java object
        LeadsData leads = gson.fromJson(reader, LeadsData.class);

        // Remove duplicates using TreeSet
        TreeSet<Lead> uniqueRecords = new TreeSet<>(leads.leads);

我不知道我哪里做错了。我检查了 Treeset 文档,看起来很简单。

java duplicates treeset
1个回答
0
投票

显然您要求消除重复的对象,其中“重复”的人具有相同的 ID 和相同的电子邮件。但随后您测试第三个字段,即日期时间字符串。因此,除非日期时间也相同,否则相同的 ID 和电子邮件不能被视为重复。

示例:

record Lead ( int id , String email , String when ) {}

Lead x = new Lead ( 1 , "[email protected]" , "2024-01-23T12:30:00" ) ;
Lead y = new Lead ( 1 , "[email protected]" , "2024-11-07T09:00:00" ) ;

根据您的规则,这些内容不会重复。日期时间文本不同,因此在您的三字段测试中,这两个对象不相等。

© www.soinside.com 2019 - 2024. All rights reserved.