首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >添加时Java Set重复失败的附加处理

添加时Java Set重复失败的附加处理
EN

Stack Overflow用户
提问于 2018-10-30 05:54:21
回答 1查看 88关注 0票数 1

我通过对我控制之外的服务方法的多次调用在HashSet中积累了唯一的对象,该方法返回一个List<Record>

一个额外的要求是,如果在此过程中发现任何重复,我需要生成一封电子邮件。我可以自己检查重复项,并保留一个可以插入或跳过的List<Record>,但这样我就不会使用从外部列表自动执行此操作的Set。显然,在设置添加失败时没有try/catch,但是有没有更好的方法呢?

代码语言:javascript
复制
HashSet<Record> set = new HashSet<Record>();
for (String org: orgs) {            
   // External service call
   List<Record> result = service.getRecords(org); 
   // Add All to Set (also need to detect duplicates with resulting logic)
   set.addAll(result);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-30 06:24:52

这取决于结果本身是否可以包含重复的记录,是否可以独立处理第三次出现的记录。

代码语言:javascript
复制
Set<Record> set = new HashSet<>();
for (String org: orgs) {            
    // External service call
    List<Record> result = service.getRecords(org); 
    // Add All to Set (also need to detect duplicates with resulting logic)
    for (Record record: result) {
        if (!set.add(record)) {
            // Handle duplicate by individual record:
            ...
        }
    }
}

或者:

代码语言:javascript
复制
Set<Record> set = new HashSet<>();
Set<Record> duplicates = new HashSet<>();
for (String org: orgs) {            
    // External service call
    List<Record> result = service.getRecords(org); 
    // Add All to Set (also need to detect duplicates with resulting logic)
    Set<Record> duplicateResult = new .HashSet<>(result);
    duplicateResult.retainAll(set);
    duplicates.addAll(duplicateResult);
    set.addAll(result);
}
for (Record record: duplicates) {
    // Handle duplicate once:
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53054407

复制
相关文章

相似问题

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