SQL查询结果对单列进行合并JAVA实现(Java groupingBy)

数据库查询结果

最终结果

 

 

JAVA实现

// 数据库查询结果
List<HrUserRoleRightDto> userRole = hrUserMapper.queryRightUserList(strIds);
// 数据格式整理 userResults
= floorsFormat(userRole);

floosFormat 方法实现

 1   private List<HrUserRoleRightDto> floorsFormat(List<HrUserRoleRightDto> source) {
 2 
 3         /**
 4          * 1.根据楼层号以外的字段分组(同一电梯非楼层号字段完全相同)(key)
 5          * 2.合并电梯的楼层号(value)
 6          */
 7 
 8         Map<HrUserRoleRightDto, Set<String>> deptGroup = source.stream().collect(Collectors.
 9                 groupingBy(hrUserRoleRightDto -> getStringKey(hrUserRoleRightDto), Collectors.mapping(HrUserRoleRightDto::getFloors, Collectors.toSet())));
10 
11         List<HrUserRoleRightDto> results = new LinkedList<>();
12         Set set = deptGroup.entrySet();
13 
14 
15         Iterator<Map<HrUserRoleRightDto, Set<String>>> it = set.iterator();
16 
17         /**
18          * 将重整格式的楼层号放入list中
19          * 即将 key 和 value 合并为一个返回结果后加入list
20          */
21         while (it.hasNext()) {
22             Map.Entry<HrUserRoleRightDto, Set<String>> me = (Map.Entry<HrUserRoleRightDto, Set<String>>) it.next();
23             HrUserRoleRightDto res = ((HrUserRoleRightDto) me.getKey());
24             String floors = me.getValue().toString();
25 
26             /**
27              * 删除字符串前后的中括号
28              * 例:[1,2,3] -> 1,2,3
29              */
30             floors = floors.substring(1, floors.length() - 1);
31             res.setFloors(floors);
32             results.add(res);
33         }
34 
35         return results;
36   }

 

 

 getStringKey方法实现

    private HrUserRoleRightDto getStringKey(HrUserRoleRightDto user) {

        /**
         * 只保留楼层编号以外的其它字段(均相同),作为分组依据
         */
        HrUserRoleRightDto temp = new HrUserRoleRightDto();
        BeanUtils.copyProperties(user, temp);
        temp.setFloors(null);
        return temp;
    }

 

posted @ 2020-11-04 18:45  宁任翃  阅读(597)  评论(0编辑  收藏  举报