关于同一个List有重复数据

需求是:查询所有的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",
                }
            ]
        }
    ]
}
发布了21 篇原创文章 · 获赞 0 · 访问量 487

猜你喜欢

转载自blog.csdn.net/mws666/article/details/104193190
今日推荐