У меня есть несколько точек данных, собранных от разных компаний, идентифицированных companyId, и свойство имени каждой точки данных может дублироваться в одной компании или среди разных компаний. Проблема состоит в том, чтобы сгруппировать все точки данных по свойству имени, которое принадлежитдля разных компаний, что означает, что мы игнорируем точку данных, если ее компания уже существует в группе.
Например, точки данных:
название точки данных companyId
1--------------------- A
1 --------------------- A
1 --------------------- B
2 --------------------- A
3 --------------------- B
Результаты будут такими:
группа имен точек данных
A ================= (1, A) (2, A)
B ================= (1, B) (2, B)
Мы можем видеть, что вторая точка данных A от компании 1. была проигнорирована.
Насколько я знаю, есть два способадедупликация работы.
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());
}
2.Создать большой Set<String>
Set<String> dedup;
for(DataPoint dp : datapoints){
String key = dp.getName() + dp.getCompanyId();
if(dedup.contains(key)){
continue;
}
dedup.add(key);
}
Итаккакой из них лучше или уместнее?