Java封裝樹形結構資料
阿新 • • 發佈:2021-10-28
業務場景
進行業務開發時,有時前端需要一個樹形導航選單,或者分類選單,這樣就需要後端把資料封裝成一個樹形結構。比較常見的像導航選單、省市區級聯等。
在此模擬一個類似場景,查詢部門資訊,並且存在上下級。
實體類
實體類中使用parentCode
來實現資料關聯。
/** * @author Yoko * @date 2021/10/28 */ @Data @Builder public class Department { /** * 公司編碼 */ private Integer companyCode; /** * 部門名稱 */ private String name; /** * 部門編碼 */ private Integer code; /** * 上級部門編碼 */ private Integer parentCode; /** * 部門下所管轄部門 */ private List<Department> children; }
業務實現
public static void main(String[] args) { // 查詢公司下所有部門資訊 List<com.hqins.ishare.user.demo.Department> departmentList = departmentListByCompanyCode(); // 使用filter()過濾,獲取最上層部門 List<com.hqins.ishare.user.demo.Department> result = departmentList.stream().filter(depart -> 0 == depart.getParentCode()) // 使用peek() 為上級部門新增下級部門 .peek(depart -> depart.setChildren(createChildList(depart, departmentList))) // 排序 .sorted(Comparator.comparing(com.hqins.ishare.user.demo.Department:: getCode)) // 收集資料至list .collect(Collectors.toList()); System.out.println(JSONObject.toJSONString(result)); } /** * 遞迴獲取 * 根據當前部門,獲取其子部門 */ private static List<com.hqins.ishare.user.demo.Department> createChildList(com.hqins.ishare.user.demo.Department father, List<com.hqins.ishare.user.demo.Department> list) { return list.stream().filter(model -> father.getCode().equals(model.getParentCode())) .peek(model -> model.setChildren(createChildList(model, list))) .sorted(Comparator.comparing(com.hqins.ishare.user.demo.Department:: getCode)) .collect(Collectors.toList()); } /** * 模擬資料庫查詢 * 根據公司編碼獲取公司所有部門資訊 */ private static List<com.hqins.ishare.user.demo.Department> departmentListByCompanyCode() { List<com.hqins.ishare.user.demo.Department> result = new ArrayList<>(); com.hqins.ishare.user.demo.Department model1 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("技術部").code(10000).parentCode(0).build(); com.hqins.ishare.user.demo.Department model2 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("java開發部").code(10001).parentCode(10000).build(); com.hqins.ishare.user.demo.Department model3 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("前端技術部").code(10002).parentCode(10000).build(); com.hqins.ishare.user.demo.Department model4 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("人事部").code(10003).parentCode(0).build(); com.hqins.ishare.user.demo.Department model5 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("人事一部").code(10004).parentCode(10003).build(); com.hqins.ishare.user.demo.Department model6 = com.hqins.ishare.user.demo.Department.builder().companyCode(10086).name("人事二部").code(10005).parentCode(10003).build(); result.add(model1); result.add(model2); result.add(model3); result.add(model4); result.add(model5); result.add(model6); return result; }
資料結果
學習是一個循序漸進的過程,而學習的時間從來都不晚,只要你開始學習。[{ "children": [{ "children": [], "code": 10001, "companyCode": 10086, "name": "java開發部", "parentCode": 10000 }, { "children": [], "code": 10002, "companyCode": 10086, "name": "前端技術部", "parentCode": 10000 }], "code": 10000, "companyCode": 10086, "name": "技術部", "parentCode": 0 }, { "children": [{ "children": [], "code": 10004, "companyCode": 10086, "name": "人事一部", "parentCode": 10003 }, { "children": [], "code": 10005, "companyCode": 10086, "name": "人事二部", "parentCode": 10003 }], "code": 10003, "companyCode": 10086, "name": "人事部", "parentCode": 0 }]