我有两个对象ArrayList:modelList
包含Model
个对象,entityList
包含Entity
个对象。 Model
和Entity
个对象都有一个名为id
的属性。
我的目标是遍历Model
中的每个modelList
,如果Entity
中的entityList
具有相同的id
值,请致电方法merge()
。
目前,我这样做:
for (Model model : modelList) {
for (Entity entity : entityList) {
if (model.getId().equals(entity.getId())) merge(entity, model);
}
}
这似乎不是很有效,特别是对于大型数据集。什么是实现预期结果的更好方法?
提前致谢!
答案 0 :(得分:3)
将Map<IdType, Entity>
对象用于将Entity
映射到id
的{{1}}个对象。
也许您可以更改生成Entity
的代码以返回List<Entity>
答案 1 :(得分:0)
也许您可以构建模型的地图模型并在其中进行搜索。
for(Entity entity: entityList) {
Model model = models.get(entity.getId());
if (model != null) {
merge(entity, model);
}
}
如果您的模型少于实体,那么这项工作就可以了!
答案 2 :(得分:0)
根据René的回答,我接受了这个:
Map<String, Model> modelMap = new HashMap<String, Model>();
for (Model model : modelList)
if (!modelMap.containsKey(model.getKey())) modelMap.put(model.getKey(), model);
Iterator it = entityList.iterator();
while (it.hasNext()) {
Entity entity = (Entity) it.next();
String key = entity.getKey();
if (modelMap.containsKey(key)) merge(entity, modelMap.get(key));
else it.remove();
}
仍然愿意改进答案...