需求是:查询所有的A,A与B通过某一字段关联,与之匹配的B要放在相应匹配的那条A记录下,用List返回数据
解决方案是:先查询出数据A,然后再查询与A关联的数据B,分别遍历A和B,把与之匹配的B放在A相应的数据下
问题是:分别遍历A和B,首先遍历A,然后在嵌套遍历B,把与之匹配的B放在相应地A的数据下面,这样想是没有错,可是遍历出来的数据添加之后的数据结果却是与A的a字段匹配的和与之不匹配的数据B都在一个List集合中,之后经过debug发现问题出现在放置的List的位置不正确。
错误的List位置
List<SysSceceDto> list2=new ArrayList();//List 集合放在最外边
if (sysMonitoringDtos!=null && list!=null){
//首先遍历A
for (SysMonitoringDto sysMonitoringDto : sysMonitoringDtos) {
//然后再遍历B
for (SysSceceDto sysSceceDto : list) {
//比较A和B的字段是否相同
if (sysMonitoringDto.getChannel().equals(sysSceceDto.getChannel())){
//把比较相等的B放进A
list2.add(sysSceceDto);
sysMonitoringDto.setPresetList(list2);
}
}
}
}
错误的结果是(JSon格式)
{
"return_code": 0,
"return_msg": "查询成功",
"list": [
{
"areaId": 0,
"areaName": "数据A",
"channel": "13110000001310001193",
"presetList": [
{
"areaName": "",
"channel": "13110000001310001193",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
}
]
},
{
"areaId": 0,
"areaName": "数据A",
"channel": "13110000001310001125",
"presetList": [
{
"areaName": "",
"channel": "13110000001310001193",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
}
]
}
]
}
正确的List位置
if (sysMonitoringDtos!=null && list!=null){
//遍历数据A
for (SysMonitoringDto sysMonitoringDto : sysMonitoringDtos) {
/**
List 放在每次遍历数据A后遍历数据B之间,这样每次遍历都会重新创建一个新的List,第一次遍历后
与之匹配的数据B也就放进一个List,第二次遍历后就是新的List他会放进遍历数据A的b字段与之匹配的B,
这样A的a字段的数据B,和A的b字段的数据B就不会混淆
*/
List<SysSceceDto> list2=new ArrayList();
//遍历数据B
for (SysSceceDto sysSceceDto : list) {
//比较A和B的字段是否相同
if (sysMonitoringDto.getChannel().equals(sysSceceDto.getChannel())){
//把比较相等的B放进A
list2.add(sysSceceDto);
sysMonitoringDto.setPresetList(list2);
}
}
}
}
正确的结果
{
"return_code": 0,
"return_msg": "查询成功",
"list": [
{
"areaId": 0,
"areaName": "数据A",
"channel": "13110000001310001193",
"presetList": [
{
"areaName": "",
"channel": "13110000001310001193",
}
]
},
{
"areaId": 0,
"areaName": "数据A",
"channel": "13110000001310001125",
"presetList": [
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
},
{
"areaName": "",
"channel": "13110000001310001125",
}
]
}
]
}