Java數據封裝成樹形結構,多級


參考地址:https://blog.csdn.net/chendu500qiang/article/details/91493147

1、實體類

@data
public class PublishServiceType  implements Comparable<PublishServiceType>{


    /**
     * 
     */
    private static final long serialVersionUID = -3572108154932898825L;


    /* 
     * @see {code}
     * @comment 類型標識
     */
    private String code;
    /* 
     * @see {createtime}
     * @comment 創建時間
     */
    private java.util.Date createtime;
    /* 
     * @see {defaultmanual}
     * @comment 服務類型默認使用手冊
     */
    private String defaultmanual;
    /* 
     * @see {description}
     * @comment 服務類型描述
     */
    private String description;
    /* 
     * @see {id}
     * @comment 主鍵
     */
    private String id;
    /* 
     * @see {isdelete}
     * @comment 是否可以刪除
     */
    private Integer isdelete;
    /* 
     * @see {lastmodifytime}
     * @comment 最近修改時間
     */
    private java.util.Date lastmodifytime;
    /* 
     * @see {name}
     * @comment 服務類型名稱
     */
    private String name;
    /* 
     * @see {parentid}
     * @comment 服務類型父節點
     */
    private String parentid;

    /**
     * 排序
     */
    private Integer sort;

    private List<PublishServiceType>children;
}

2、數據封裝

 @Override
    public List<PublishServiceType> findList(String name) {
        List<PublishServiceType>list = publishServiceTypeMapper.findByName(name);
        if (JudgeUtil.isEmpty(list)){
            return null;
        }
        //父子級組裝
        return  parentAndChildren(list);
    }
 private List<PublishServiceType>parentAndChildren(List<PublishServiceType> list){

        //最頂層根節點
        List<PublishServiceType>rootList = new ArrayList<>();
        //非最頂層根節點
        List<PublishServiceType>bodyList = new ArrayList<>();
        for (PublishServiceType publishServiceType : list) {
            if (StringUtils.isBlank(publishServiceType.getParentid())){
                rootList.add(publishServiceType);
            }else{
                bodyList.add(publishServiceType);
            }
        }
        return getTree(rootList,bodyList);
    }

    public List<PublishServiceType> getTree(List<PublishServiceType>rootList, List<PublishServiceType>bodyList){
        if (!JudgeUtil.isEmpty(bodyList)){
            //聲明一個map,用來過濾已操作過的數據
            Map<String,String> map = new HashMap<>(bodyList.size());
            rootList.forEach(parent->getChild(parent,bodyList,map));
            return rootList;
        }else{
            return rootList;
        }
    }

    private void getChild(PublishServiceType parent,List<PublishServiceType>bodyList, Map<String,String> map){
       List<PublishServiceType>childList = new ArrayList<>();
        bodyList.stream().filter(c->!map.containsKey(c.getId()))
                         .filter(c->c.getParentid().equals(parent.getId()))
                         .forEach(c->{
                             map.put(c.getId(),c.getParentid());
                             getChild(c,bodyList,map);
                             childList.add(c);
                         });
        
        parent.setChildren(childList);
    }

3、結果

 1 {
 2   "code": 20000,
 3   "message": "成功",
 4   "data": [
 5     {
 6       "code": null,
 7       "createtime": null,
 8       "defaultmanual": null,
 9       "description": null,
10       "id": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
11       "isdelete": -1,
12       "lastmodifytime": null,
13       "name": "基礎服務",
14       "parentid": "",
15       "sort": 1,
16       "children": [
17         {
18           "code": null,
19           "createtime": null,
20           "defaultmanual": null,
21           "description": null,
22           "id": "b1779671ef1b45e0a9a8a1edbff03f1e",
23           "isdelete": -1,
24           "lastmodifytime": null,
25           "name": "數據源服務",
26           "parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
27           "sort": 2,
28           "children": [
29             {
30               "code": null,
31               "createtime": null,
32               "defaultmanual": null,
33               "description": null,
34               "id": "2a38a8254ec348e9b54c9bf4622f23db",
35               "isdelete": 1,
36               "lastmodifytime": null,
37               "name": "測試添加數據庫服務2",
38               "parentid": "b1779671ef1b45e0a9a8a1edbff03f1e",
39               "sort": null,
40               "children": []
41             }
42           ]
43         },
44         {
45           "code": null,
46           "createtime": null,
47           "defaultmanual": null,
48           "description": null,
49           "id": "d4f3b047dc2d467a9b404ded8acf4673",
50           "isdelete": 1,
51           "lastmodifytime": null,
52           "name": "text_lsa",
53           "parentid": "dc1d70b9eb7b4df3bbe8dcc6a93cbd57",
54           "sort": null,
55           "children": []
56         }
57       ]
58     },
59     {
60       "code": null,
61       "createtime": null,
62       "defaultmanual": null,
63       "description": null,
64       "id": "af1b4a4d2f074fa19e1dae0a5540a5bf",
65       "isdelete": 1,
66       "lastmodifytime": null,
67       "name": "測試添加1",
68       "parentid": "",
69       "sort": null,
70       "children": []
71     },
72     {
73       "code": null,
74       "createtime": null,
75       "defaultmanual": null,
76       "description": null,
77       "id": "62e15d859a224126884888a55df355a7",
78       "isdelete": 1,
79       "lastmodifytime": null,
80       "name": "測試添加2",
81       "parentid": "",
82       "sort": null,
83       "children": []
84     }
85   ]
86 }
View Code


免責聲明!

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



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