关于一些工作中遇到的问题

1、关于将数据库查询的参数转换为不同格式返回

第一个:
因为我返回给前端的数据都是一条一条的
“data”: {
“person_type”: [
“刑满释放人员”,
“吸毒人员”,
“社区矫正人员”,
“肇事肇祸及严重精神障碍患者”,
“艾滋病危险人员”,
“刑满释放人员”,
“吸毒人员”,
“社区矫正人员”,
“肇事肇祸及严重精神障碍患者”,
“艾滋病危险人员”
],
“name”: [“少儿”,“少儿”,“少儿”,“少儿”,“少儿”,“青年”,“青年”,“青年”,“青年”,“青年”],
“sum”: [1,1,1,1,1,1,1,1,1,1]
}
但是前端需要的参数格式是
data": {
“person_type”: [“刑满释放人员”,“吸毒人员”,“社区矫正人员”, “肇事肇祸及严重精神障碍患者”,
“艾滋病危险人员”
],
“name”: [“少儿”,“青年”],
“sum”: [
[1,1,1,1,1],
[1,1,1,1,1]
]
}
于是我开始再后端处理数据

	//查询出来的结果 存放到一个List中
	List<Map<String, Object>> userBindAndCountByType = 	
	comprehensiveOtherPersonMapper.getUserBindAndCountByType(type, keys);
	
		//分别给三个查询出的参数 建立一个数组
        List<String> personTypes = new ArrayList<>();
        List<String> names = new ArrayList<>();
        List<List<Integer>> sums = new ArrayList<>();
        

```javascript
		//遍历循环这个查询的List
        for (Map<String, Object> result : userBindAndCountByType) {
        /*
        从查询的list中通过key来获取对应的值
        */
            String personType = (String) result.get("person_type");
            String name = (String) result.get("name");
            Object count =  result.get("sum");
            /*因为获取的value是Object类型,所以需要转格式,转成Integer类型(sum是一个数字)*/
            Integer sumcount = Integer.parseInt(count.toString());
            //先判断这个personTypes 中是否有personType的值,如果没有就添加进去,这一步是为了去重*/
            if (!personTypes.contains(personType)) {
                personTypes.add(personType);
            }
			//再判断这个names中是不是又name的值,如果没有就添加,也是为了去重
            if (!names.contains(name)) {
                names.add(name);
            }

            // 根据 personType 和 name 获取索引
            int personTypeIndex = personTypes.indexOf(personType);
            int nameIndex = names.indexOf(name);
			
            // 将 count 值添加到相应的索引位置
            if (sums.size() <= nameIndex) {
                List<Integer> sum = new ArrayList<>();
                sum.add(sumcount);
                sums.add(sum);
            } else {
                List<Integer> sum = sums.get(nameIndex);
                if (sum.size() <= personTypeIndex) {
                    sum.add(sumcount);
                } else {
                    sum.set(personTypeIndex, sum.get(personTypeIndex) + sumcount);
                }
            }
        }
        // 构建最终结果的字典
        Map<String, Object> finalResult = new HashMap<>();
        finalResult.put("person_type", personTypes);
        finalResult.put("name", names);
        finalResult.put("sum", sums);

        return finalResult;

第二个:
这是一个list返回的数据

 {
            "A99": 0,
            "deptName": "铁西区",
            "A01": 0,
            "A02": 0,
            "A03": 0,
            "A04": 0,
            "A05": 0,
            "A06": 0,
            "A07": 0,
            "deptId": 373,
            "deptType": "sys_dept_type_17"
        }

这是我要返回给前端的格式,一开始绞尽脑汁也没想出来到底怎么才能转换成这种,于是去问了大哥

[
{
            "A99": 0,
            "deptName": "铁西区",
             valueList:[{"name": '血液感染',value:0},
                    {"name": '血液感染',value:0},
                    {"name": '血液感染',value:0},
                    {"name": '血液感染',value:0},
                    {"name": '血液感染',value:0},
                     ]

            "deptId": 373,
            "deptType": "sys_dept_type_17"
        }
    ]

大哥给我的回复是

List<Map<String,Object>> resultList;
Map<String,Object> map;
for(list)->i,item
  map.put("deptName",list.get(i).get("deptName"));
  List<Map<String,Object>> list2;
  Map<String,Object> map2;
  for->item
    map2.put("name",key);
    map2.put("value",item.get(key));
    list2.add(map2)
  map.put("valueList",list2);
  resultList.add(map);   

于是 我最终敲定的版本是

Map<String, Object> maps = new HashMap<>();
        List<Map<String,Object>> resultList = new ArrayList<>();
        for (Map<String, Object> map1 : safetyInvolvedCountByCaseNature) {
            String dept = (String) map1.get("deptName");
            List<Map<String,Object>> list2 = new ArrayList<>();
            for (Map.Entry<String, Object> map3 : map1.entrySet()) {
                Object key = map3.getKey();
                if (!key.equals("deptName") && !key.equals("deptId") && !key.equals("deptType")) {
                    Map<String,Object> map2 = new HashMap<>(); // 在这里创建新的 map2 对象
                    map2.put("name", key);
                    map2.put("value", map3.getValue());
                    list2.add(map2);
                }
            }
            System.out.println(list2);
            maps.put("deptName", dept);
            maps.put("list", list2);
            resultList.add(maps);
            maps = new HashMap<>(); // 在这里创建新的 maps 对象
        }
        return resultList;

遇到的问题在于最后一个maps = new HashMap<>()
遇到了这样的问题
[{name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}, {name=不详, value=0}]

最后通过将Map<String, Object> maps = new HashMap<>();的创建放在外层循环的最后一行,确保每次循环迭代时都会创建一个新的 maps 对象,从而避免了重复引用问题。这样,每次循环迭代时都会创建一个新的maps对象,并将其添加到resultList中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值