日常任务-04-技术-如何利用HashMap处理结果集,合并同类项

Map应用-结果集处理

1.问题描述:
现有一个结果集:返回了一个 List<Map<String, Object>> roleInfos,里边是一条条的记录,每条记录代表一个角色id对应一个权限id,但是角色有多个,每个角色所拥有的权限也有多个,如何把结果集处理成,每条记录代表一个角色id对应其下的全部权限ids。也就是将某角色的权限id汇总成权限ids返回。

2.初步结果集与预期结果集对比示例如下:
在这里插入图片描述

预期结果集

3.实现算法:
关键在于角色id有多个,每个角色下的权限id也有多个,要把每个角色以及该角色对应的权限ids对应起来。

思路:
3.1构建一个新的roleMap,key是角色id,value是权限ids,这样可以对应起来
3.2遍历结果集中的每条记录map,取出其角色id,判断该角色id是否存在于roleMap中,不存在说明是一个新的角色id,将其存入roleMap中,然后获取map中该角色id对应的每个权限id,存入到一个新的 List qxIdss中,
3.3遍历结果集中的每条记录map,取出其角色id,判断该角色id是否存在于roleMap中,存在说明已经遍历过该角色id的部分权限id了,roleMap中已经有对应权限id了,然后获取map中该角色id对应的每个权限id,存入到从roleMap中根据角色id的key获取到的value即qxIds,再次将新的角色id和qxids存入roleMap中。

4.代码示例:

//定义新的结果集
        List<Map<String, Object>> roleInfos=new ArrayList<>();
        //定义新的结果子集
        Map<String,Object> maps =new HashMap<>();
        List<Map<String, Object>> roleInfo = roleInfoMapper.getRoleInfo(dataMap);
        Map<String, List<Integer>> roleIdMap = new HashMap<>();
        for(Map<String,Object> map :roleInfo){
            //取出角色的id
            String roleId = String.valueOf(map.get("id"));
            //判断定义roleIdMap中包不包含,如果包含,就单独把qx_id取出来;再从roleIdMap通过角色id取出qx_id列表,把新遍历到的add进去,然后重新更新roleIdMap
            if(roleIdMap.containsKey(roleId)){
                Integer qxId = Integer.valueOf(String.valueOf(map.get("qx_id")));
                List<Integer> qxIds = roleIdMap.get(roleId);
                qxIds.add(qxId);
                roleIdMap.put(roleId, qxIds);
                map.put("qxIds", qxIds);
            } else {
                maps.put("id",roleId);
                // 如果不包含,那就单独取出qx_id,现在是Integer类型,需要转成List
                Integer qxId = Integer.valueOf(String.valueOf(map.get("qx_id")));
                List<Integer> qxIdss = new ArrayList<>();
                qxIdss.add(qxId);
                map.put("qxIds", qxIdss);
                roleIdMap.put(roleId,qxIdss);
                roleInfos.add(map);
            }
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦者晓东

我是最不起眼的程序员阿东。感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值