我有一个主要的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;
}
}
}
我尝试过很多但却失败了,任何关于该做什么的想法都会受到欢迎。
答案 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);
}
}