嵌套for循环以检查arraylist与另一个arraylist

时间:2015-12-02 12:58:38

标签: java for-loop arraylist nested

我有一个主要的arraylist(名为filteredArrayList,我想在其上导入另一个arraylist(称为importArrayList),过滤值并创建一个新的checkedArrayList,以获得真正独特的,然后将checkedArrayList最终附加到主人身上。

我的代码的问题是导入总是导入importArrayList中的所有对象,而不是实际检查当前值。

ArrayList<Patient> checkedPatientList=new ArrayList<Patient>();
                mainloop:for(Patient imp:importPatientList){
                        for(Patient p: filteredPatientList){
                            if (imp.getpID()!=p.getpID()){
                                checkedPatientList.add(imp);
                                continue mainloop;


                            }
                        }
                    }

我尝试过很多但却失败了,任何关于该做什么的想法都会受到欢迎。

5 个答案:

答案 0 :(得分:0)

你的代码不正确:

for(Patient p: filteredPatientList){
                        if (imp.getpID()!=p.getpID()){
                            checkedPatientList.add(imp);

你必须在导入之前检查所有checkedPatientList。

一套更简单,更快。

假设

public class Patient
{
public String getpID()
    {
    return "XX";
    }
}



ArrayList<Patient> importPatientList=new ArrayList<Patient>();

ArrayList<Patient> checkedPatientList=new ArrayList<Patient>();


// Do a Set with ID
Set<String> unique_id=new HashSet<String>();

 for(Patient p: checkedPatientList)
     unique_id.add(p.getpID());


// every patient in imported if not already checked
for(Patient imp:importPatientList)
if (!unique_id.contains(imp.getpID()))
           checkedPatientList.add(imp);

答案 1 :(得分:0)

试试这个 -

if (imp.getpID().equals(p.getpID())){
......
}

现在,我假设您已获得所需的患者名单,该名单的名称是患者。现在您需要做的是将列表分配给Set以使集合唯一。

Set<Patient> set = new HashSet<Patient>(patients);

如果你只能使用Set移动,那就ok了。但如果你需要再次使用List,请执行以下操作 -

List<Patient> patients = new ArrayList<Patient>(set);

现在该列表包含所有独特的患者。

答案 2 :(得分:0)

我最终得到了它!谢谢大家的答案,真的帮助了我。

如果我学到了什么,那就是在嵌套for循环中,在进入循环之前要小心你做的事情!

boolean isunique=true;
                    for(Patient imp: importPatientList){                                                                            
                        for(Patient p: filteredPatientList){
                            if (imp.getpID()==p.getpID()){
                                isunique=false;
                                break;
                            }
                            else{
                                isunique=true;
                            }
                        }
                        if(isunique){
                            checkedPatientList.add(imp);
                        }
                    }

答案 3 :(得分:0)

我认为最简单的方法是使用Set。然后,如果您真的需要,可以将其内容复制到新的ArrayList。

Set filteredSet = new HashSet<>();
filteredSet.addAll(filteredPatientList);
filteredSet.addAll(importPatientList);
List checkedPatientList = new ArrayList<>(filteredSet);

答案 4 :(得分:0)

你给自己的答案在技术上是正确的,但如果你只是想用更少的代码行来消除它,那么你可能更喜欢这样的东西:

ArrayList<Patient> checkedPatientList=new ArrayList<Patient>();    

for(Patient imp : importPatientList) {
    boolean patientIsUnique = true;

    for(Patient p : filteredPatientList) {
        if (imp.getpID() == p.getpID()) {
            patientIsUnique = false;
        }                            
    }        
    if (patientIsUnique) {
        checkedPatientList.add(imp);
    }
}