java 樹形結構遞歸


查出所有的節點,根據父節點找到一級節點填充數據:

 1 @PostMapping(value = "/TRACK140101")
 2     public R TRACK140101(@RequestBody TRACK140101Request param) {
 3         String inputParam = "";
 4         try {
 5             inputParam = objectMapper.writeValueAsString(param);
 6             //查詢能看到的節點
 7             List<String> dpIds = remoteCommonService.queryDimensions(param.getJobNo(), DimensionIdEnum.DIMENSIONID.getValue());
 8             //查詢所有組織機構
 9             List<CommonDataDimensionVal> commonDataDimensionVals = commonDataDimensionValService.findAll(dpIds);
10             //一級節點
11             List<TRACK140101Response> response = new ArrayList<>();
12             List<CommonDataDimensionVal> CommonDataDimensionValList = commonDataDimensionVals.stream().filter(one -> one.getParentId().equals(DPID)).collect(Collectors.toList());
13             //遍歷一級機構
14             CommonDataDimensionValList.forEach(commonDataDimens -> {
15                 TRACK140101Response trackReponse = new TRACK140101Response();
16                 trackReponse.setId(commonDataDimens.getDpId());
17                 trackReponse.setLabel(commonDataDimens.getDpName());
18                 //調用遞歸體
19                 trackReponse.setChildren(getchild(commonDataDimens, commonDataDimensionVals));
20                 response.add(trackReponse);
21             });
22 
23             return R.ok(response);
24         } catch (Exception e) {
25             log.error("【TRACK140101-組織機構樹查詢 入參 】:" + inputParam);
26             log.error("【TRACK140101-組織機構樹查詢 】", e);
27             return R.error();
28         }
29     }

根據父節點id查找對應的子節點信息填充  遞歸調用

 /**
     * 遞歸體
     *
     * @return
     */
    public List<TRACK140101Response> getchild(CommonDataDimensionVal commonDataDimens, List<CommonDataDimensionVal> commonDataDimensionVals) {
        //篩選出下一級的機構信息
        List<CommonDataDimensionVal> CommonDataDimensionValList = commonDataDimensionVals.stream().filter(one -> one.getParentId().equals(commonDataDimens.getDpId())).collect(Collectors.toList());
        List<TRACK140101Response> response = new ArrayList<>();
        if (StringUtils.isNotEmpty(CommonDataDimensionValList)) {
            //遍歷下一級的機構信息,並封裝返回參數
            CommonDataDimensionValList.forEach(childCommonDataDimens -> {
                TRACK140101Response trackReponse = new TRACK140101Response();
                trackReponse.setId(childCommonDataDimens.getDpId());
                trackReponse.setLabel(childCommonDataDimens.getDpName());
                //調用遞歸體
                trackReponse.setChildren(getchild(childCommonDataDimens, commonDataDimensionVals));
                response.add(trackReponse);
            });
        }
        return response;
    }

樹形結構對應的實體類:

@Data
public class TRACK140101Response {
    /**
     * 機構id
     */
    private String id;
    /**
     * 機構名稱
     */
    private String label;
    /**
     * 子節點
     */
    private List<TRACK140101Response> children;

}

以上.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM