dev*_*app 4 java performance merge list
我试图将多个对象列表与一个公共字段合并到另一个列表中.
例如:
List <ObjA>,List <ObjB>,List <ObjC>,List <ObjD>
ObjA:String id; 字符串名称,字符串a; 字符串b;
ObjB:String id; 字符串地址; 字符串x;
ObjC:String id; 串电话; 字符串y;
ObjD:String id; 字符串邮政编码;
现在我想以非常有效的方式将这些列表合并到List <ObjZ>中.
ObjZ:String id; 字符串名称,字符串a; 字符串b; 字符串地址; 字符串x; 串电话; 字符串y; 字符串邮政编码;
任何人都可以帮我写一个有效的代码为上述?
使用Map而不是List,并使所有Objs实现一个定义getId()的接口,该接口用作键.然后,对于List AD中的每个条目,从Map获取(并可能创建ObjZ)并更新其详细信息.
你可以把它变得非常通用.Java伪代码:
interface ObjCopier {
String getId();
void copyToObjZ(ObjZ z);
}
Run Code Online (Sandbox Code Playgroud)
例如
class ObjA implements ObjCopier {
...
String getId() { return id; }
void copyToObjZ(ObjZ z) {
z.setName(name);
z.setA(a);
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后最后一点合并它:
public void mergeObj(Map<String, ObjZ> map, Collection<? extends ObjCopier> list) {
for (ObjCopier obj : list) {
ObjZ z = getOrCreateObjZFromMap(map, obj.getId());
obj.copyToObjZ(z);
}
}
Run Code Online (Sandbox Code Playgroud)
并针对您拥有的所有列表调用mergeObj().
如果您正在讨论一个非常大的数据集,并且各个ObjA-ObjD中的字段没有重叠,您可以考虑使用一个线程池,其中每个mergeObj()方法都在不同的线程中运行.您需要同步getOrCreateObjZFromMap(),或者在启动线程之前预先创建所有ObjZ实例.这可以大大加快这个过程,但你的里程可能会有所不同,所以总是最好用反映你情况的数据进行测试.
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |