我在MasterList
表中的查询获取以下记录:
id listName listValue
1 Type of Repository Animal Specimen
2 Type of Repository Human Specimen
3 Type of Repository Environmental Specimen
4 Type of Repository Microorganism Culture Collection
5 Type of Repository Vegetal Specimen
6 Type of Repository Other
每个记录/行都是一个对象,并作为对象列表存储在以下列表中
List<MasterList> typeOfRepositoryMasterList
同样,每个对象都有相应的
getter
方法用于obj.getListValue();
列然后从其他查询到
biobankList
表,我有以下记录:biobankId listName listValue
1 Type of Repository Animal Specimen
1 Type of Repository Human Specimen
1 Type of Repository Microorganism Culture Collection
1 Type of Repository Vegetal Specimen
同样,这些记录也可以作为对象列表使用
List<biobankList> typeOfRepositoryBiobankList
并且这里的每个对象还具有相应的
getter
方法。我想要做的是,对于第一个记录集中的所有
listValue
,如果第二个记录集中存在相同的listValue
,则将其添加到新列表中,例如selectedList
。第二个记录集中不存在的两个listValue
应该添加到availableList
中。图片可能会更好地说明。for(MasterList attributeMaster: typeOfRepositoryMasterList){
boolean selected = false;
for(biobankList attribute: typeOfRepositoryBiobankList){
if(attributeMaster.getListValue().equals(attribute.getListValue())){
System.out.println("equal");
selected = true;
selectedList.add(new KeyValuePair(
attribute.getListName()+"_"+attribute.getListValue(), attribute.getListValue()));
break;
}
if(!selected){
System.out.println("not equal");
availableList.add(new KeyValuePair(
attributeMaster.getListName()+"_"+attributeMaster.getListValue(), attributeMaster.getListValue()));
}
}
}
该查询工作正常,但是嵌套嵌套的循环代码显然无法正常工作,因为它多次添加了相同的值。
编辑:我尝试添加
boolean
,但问题仍然存在。我在selectedList中得到正确的值,但显然availableList包含重复的值。这是屏幕截图。 最佳答案
我相信您的问题出在else语句上。每次调用内部循环且不存在匹配项(属性和attributeMaster具有不同的listValue)时,您的代码都会将该listValue添加到availableList中。
您必须通过以下方式更改逻辑:
在第二个循环之外定义一个布尔值,并将其设置为false。只要找到匹配项(在break;
之前),将其设置为true。
在第二个循环之外,检查布尔值是否为真(意味着当前的'attributeMaster'已匹配),不要将其添加到availableList中。这是正确的代码:
for(MasterList attributeMaster: typeOfRepositoryMasterList){
boolean found = false;
for(biobankList attribute: typeOfRepositoryBiobankList){
if(attributeMaster.getListValue().equals(attribute.getListValue())){
System.out.println("equal");
selectedList.add(new KeyValuePair(attribute.getListName()+"_"+attribute.getListValue(), attribute.getListValue()));
found = true;
break;
}
}
if (!found) {
System.out.println("not equal");
availableList.add(new KeyValuePair(attributeMaster.getListName()+"_"+attributeMaster.getListValue(),attributeMaster.getListValue()));
}
}