1. 程式人生 > 實用技巧 >SQL查詢結果對單列進行合併JAVA實現

SQL查詢結果對單列進行合併JAVA實現

資料庫查詢結果

最終結果

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 = new
LinkedList<>(); 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;
    }