我的基本问题是我有4种不同的数据源(DS1,DS2,DS3,DS4),我目前存储在4个不同的列表中。每个列表都填充了InformationObjects,这些对象有四个字段,如果它们存在则是标识符,但所有这些字段都不必存在。然后大约有20个字段包含有关该对象的随机信息。
我需要做的是将这些列表合并为一个新列表,如果来自不同数据源的两个对象具有相同的任何标识符,则应将它们视为同一个对象,并且应合并它们的字段。
示例:
Object1
idField1: "123"
idField3: "437"
infoField1: "info1"
infoField2: "info2"
Object2
idField1: "123"
idField2: "gfd"
idField4: "9987"
infoField3: "info3"
infoField4: "info4"
Object3
idField2: "gfd"
infoField5: "info5"
Merged
idField1: "123"
idField2: "gfd"
idField3: "437"
idField4: "9987"
infoField1: "info1"
infoField2: "info2"
infoField3: "info3"
infoField4: "info4"
infoField5: "info5"
这次合并将会很多,所以我需要找到最快的方法。所以我的问题是你如何以最有效的方式做到这一点?
答案 0 :(得分:1)
List<InformationObject> doMerge()
{
Map<String, List<InformationObject>> map = new HashMap<>();
addData(map, ds1);
addData(map, ds2);
addData(map, ds3);
addData(map, ds4);
List<InformationObject> result = new ArrayList<>();
for(List<InformationObject> ios: map.values())
{
InformationObject io = mergeObjects(ios);
result.add(io);
}
return result;
}
private void addData(Map<String, List<InformationObject>> map, Datasource ds)
{
for(InformationObject io : ds...)
{
String id = io.getId();
List<InformationObject> list = map.get(id);
if(list == null) list = new ArrayList<>();
list.add(io);
}
}