1

我有两个对象的 ArrayLists:modelList一个包含Model对象,entityList一个包含Entity对象。Model和对象都有Entity一个名为 的属性id

我的目标是遍历每个Modelin modelList,如果存在具有相同值的Entityin ,则调用方法。entityListidmerge()

目前,我正在这样做:

for (Model model : modelList) {
    for (Entity entity : entityList) {
        if (model.getId().equals(entity.getId())) merge(entity, model);
    }
}

这似乎不是很有效,尤其是对于大型数据集。实现预期结果的更好方法是什么?

提前致谢!

4

3 回答 3

3

将 aMap<IdType, Entity>用于将Entity映射id到 的对象Entity

也许您可以更改产生的代码List<Entity>以返回 aMap

于 2013-10-28T17:41:01.283 回答
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();
}

仍然对改进的答案持开放态度......

于 2013-10-28T18:45:45.213 回答
0

也许您可以构建模型的地图模型并在其中搜索。

for(Entity entity: entityList) {
    Model model = models.get(entity.getId());
    if (model != null) {
        merge(entity, model);
    }
}

如果您的模型比实体少得多,则此工作!

于 2013-10-28T17:42:47.613 回答