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; }