SQL查詢結果對單列進行合併JAVA實現
阿新 • • 發佈:2020-11-04
資料庫查詢結果
最終結果
JAVA實現
// 資料庫查詢結果
List<HrUserRoleRightDto> userRole = hrUserMapper.queryRightUserList(strIds);
// 資料格式整理 userResults = floorsFormat(userRole);
floosFormat 方法實現
private List<HrUserRoleRightDto> floorsFormat(List<HrUserRoleRightDto> source) { /** * 1.根據樓層號以外的欄位分組(同一電梯非樓層號欄位完全相同)(key) * 2.合併電梯的樓層號(value)*/ Map<HrUserRoleRightDto, Set<String>> deptGroup = source.stream().collect(Collectors. groupingBy(hrUserRoleRightDto -> getStringKey(hrUserRoleRightDto), Collectors.mapping(HrUserRoleRightDto::getFloors, Collectors.toSet()))); List<HrUserRoleRightDto> results = newLinkedList<>(); Set set = deptGroup.entrySet(); Iterator<Map<HrUserRoleRightDto, Set<String>>> it = set.iterator(); /** * 將重整格式的樓層號放入list中 * 即將 key 和 value 合併為一個返回結果後加入list */ while (it.hasNext()) { Map.Entry<HrUserRoleRightDto, Set<String>> me = (Map.Entry<HrUserRoleRightDto, Set<String>>) it.next(); HrUserRoleRightDto res = ((HrUserRoleRightDto) me.getKey()); String floors = me.getValue().toString(); floors = floors.substring(1, floors.length() - 1); res.setFloors(floors); results.add(res); } return results; }
getStringKey方法實現
private HrUserRoleRightDto getStringKey(HrUserRoleRightDto user) { /** * 只保留樓層編號以外的其它欄位(均相同),作為分組依據 */ HrUserRoleRightDto temp = new HrUserRoleRightDto(); BeanUtils.copyProperties(user, temp); temp.setFloors(null); return temp; }