L.M*_*ple 1 java data-structures
我有一些从companyId识别的不同公司收集的数据点,每个数据点的名称属性可能在一家公司或不同公司之间重复.问题是按名称属性对属于不同公司的所有数据点进行分组,这意味着如果公司已经存在于该组中,我们将忽略该数据点.
例如,数据点是:
companyId数据点名称
1 --------------------- A
1 --------------------- A
1 --------------------- B
2 --------------------- A
3-- -------------------乙
结果将是:
数据点名称组
A =================(1,A)(2,A)
B =================(1,B )(2,B)
我们可以看到公司1的第二个数据点A被忽略了.
据我所知,有两种方法可以进行重复数据删除工作.
1.建立一个Map<String(data point name), Set<Long(companyId)>>
Map<String, Set<Long>> dedup = new HashMap<>();
for(DataPoint dp : datapoints){
String key = dp.getName();
if(!dedup.contains(key)){
dedup.put(key, new HashSet<Long>());
}
if(dedup.get(key).contains(dp.getCompanyId()){
continue;
}
dedup.get(key).add(dp.getCompanyId());
}
Run Code Online (Sandbox Code Playgroud)
2.建立一个大的 Set<String>
Set<String> dedup;
for(DataPoint dp : datapoints){
String key = dp.getName() + dp.getCompanyId();
if(dedup.contains(key)){
continue;
}
dedup.add(key);
}
Run Code Online (Sandbox Code Playgroud)
那么哪一个更好或更合适?
方法(1)更好,因为方法2类破坏了类型信息.
如果您想要经过充分测试的强大实施,并且有许多其他功能,那么现有的集合已经可用于这种情况.
番石榴:https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/HashMultimap.html
Eclipse集合:https: //www.eclipse.org/collections/
如果您只想要一个简单的实现,您可以按照您的方法(1)自己完成.
结果将是这样的:
{
"A": [1, 2],
"B": [1, 2]
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢方法2的几个原因:
<id>~<name><id>~<name>~<pincode>,| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |