添加时Java集重复失败的附加处理
我在一个添加时Java集重复失败的附加处理,java,Java,我在一个散列集中积累了一些独特的对象,这些对象来自于对一个超出我控制范围的服务方法的多次调用,该服务方法返回一个列表 另外一个要求是,如果在此过程中发现任何重复项,我需要生成一封电子邮件。我可以自己检查重复项并保留一个插入或跳过的列表,但我不会使用一个从外部列表自动执行此操作的集。显然,在Set Add失败时不会出现try/catch,但是有更好的方法吗 HashSet<Record> set = new HashSet<Record>(); for (String or
散列集中积累了一些独特的对象,这些对象来自于对一个超出我控制范围的服务方法的多次调用,该服务方法返回一个列表
另外一个要求是,如果在此过程中发现任何重复项,我需要生成一封电子邮件。我可以自己检查重复项并保留一个插入或跳过的列表,但我不会使用一个从外部列表自动执行此操作的集。显然,在Set Add失败时不会出现try/catch
,但是有更好的方法吗
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);
}
HashSet=newhashset();
对于(字符串组织:组织){
//外部服务呼叫
列表结果=service.getRecords(组织);
//将全部添加到集合(还需要使用结果逻辑检测重复项)
set.addAll(结果);
}
这取决于结果本身是否包含重复记录,
一个人是否能够不加考虑地处理记录的第三次出现
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:
...
}
}
}
Set Set=newhashset();
对于(字符串组织:组织){
//外部服务呼叫
列表结果=service.getRecords(组织);
//将全部添加到集合(还需要使用结果逻辑检测重复项)
用于(记录:结果){
如果(!set.add(记录)){
//按单个记录处理重复:
...
}
}
}
或:
Set Set=newhashset();
Set duplicates=new HashSet();
对于(字符串组织:组织){
//外部服务呼叫
列表结果=service.getRecords(组织);
//将全部添加到集合(还需要使用结果逻辑检测重复项)
Set duplicateResult=new.HashSet(结果);
重复结果。保留(集合);
duplicates.addAll(duplicateResult);
set.addAll(结果);
}
用于(记录:重复){
//处理重复一次:
...
}
我不太明白问题出在哪里。(Record res:result){if(set.contains(res))duplicateFoundCode(res);set.add(res);}
的有什么问题吗?谢谢,但这就像使用列表一样吗?我可以使用具有相同代码的列表。顺便说一句,您的提示的一个问题是,我得到了一个列表,每次我得到初步结果时,我都需要额外的遍历来检测重复。如果要求只是在发现重复时生成电子邮件,为什么不在addAll方法之前和之后比较设置大小?如果结果等于PreviousSetSize+ListSize,则不存在重复,如果结果较小,则存在重复。为什么4行代码(如果使用Java8,它也是1行代码,尽管答案是不使用它)比1行代码好,加上每次迭代都使用If。不过,它提供了准确的记录,所以请根据自己的目的使用它。如果您只需要电子邮件中重复项的数量,请使用我的解决方案,如果您需要计数,则必须使用计数器来增加,否则,您将试图避免保留以前的设置大小。是的,这是一个很好的解决方案。至少!set.add(record)
为我省去了执行contains
的麻烦,否则我将不得不这样做。不幸的是,仍然需要遍历临时调用结果,但总体来说要好得多。
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:
...
}