Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在两个ArrayList中查找匹配对象值的最有效方法?_Java_Loops_Arraylist_Match - Fatal编程技术网

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

Java:在两个ArrayList中查找匹配对象值的最有效方法?,java,loops,arraylist,match,Java,Loops,Arraylist,Match,我有两个对象数组列表:modelList包含Model对象,以及entityList包含Entity对象。Model和Entity对象都有一个名为id的属性 我的目标是在模型列表中遍历每个模型,如果实体列表中有一个实体具有相同的id值,则调用方法merge() 目前,我正在这样做: for (Model model : modelList) { for (Entity entity : entityList) { if (model.getId().equals(enti

我有两个对象数组列表:
modelList
包含
Model
对象,以及
entityList
包含
Entity
对象。
Model
Entity
对象都有一个名为
id
的属性

我的目标是在
模型列表
中遍历每个
模型
,如果
实体列表
中有一个
实体
具有相同的
id
值,则调用方法
merge()

目前,我正在这样做:

for (Model model : modelList) {
    for (Entity entity : entityList) {
        if (model.getId().equals(entity.getId())) merge(entity, model);
    }
}
这似乎不是很有效,尤其是对于大型数据集。实现预期结果的更好方法是什么

提前谢谢

对将
id
映射到
实体的
实体
对象使用
映射


也许您可以更改生成
列表的代码,以返回
映射

也许您可以构建模型的映射模型并在其中进行搜索

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

如果您的模型比实体少得多,则此项工作将正常进行

根据勒内的回答,我同意这一点:

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();
}
Map modelMap=newhashmap();
对于(模型:模型列表)
如果(!modelMap.containsKey(model.getKey()))modelMap.put(model.getKey(),model);
迭代器it=entityList.Iterator();
while(it.hasNext()){
实体=(实体)it.next();
String key=entity.getKey();
if(modelMap.containsKey(key))合并(entity,modelMap.get(key));
否则,删除();
}

仍然欢迎改进答案…

正如Rene所回答的,哈希通常比遍历列表更快。list1.retainAll(List2)应该可以帮您完成。谢谢。retainAll()方法在这种情况下不起作用,因为Model和Entity是两个不同的对象类。谢谢。在这种情况下,entity.getId()不会返回一个用作modelList.get()参数的值。我认为这让我走上了正确的道路。。。