Java:在两个ArrayLists中查找匹配对象值的最有效方法?

时间:2013-10-28 17:38:44

标签: java loops arraylist match

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

我的目标是遍历Model中的每个modelList,如果Entity中的entityList具有相同的id值,请致电方法merge()

目前,我这样做:

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

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

提前致谢!

3 个答案:

答案 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();
}

仍然愿意改进答案...