java查詢三級樹(三級目錄)


背景:

三級樹實現效果

image-20210423151426027

這里只介紹,查詢數據庫,構建三級目錄的后端業務邏輯

1.創建查詢類(對應數據庫需要查出的字段)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnTree {
    private Integer value; //當前標簽的id
    private String label;
    private Integer parentId;//當前標簽的父id

    private List<ColumnTree> children = new ArrayList<>();//遞歸思想,這個屬性將作為子級目錄
}

2.service層的業務邏輯

public GlobalResponse findColumnsTree() {
//先查詢出數據所有的標簽數據列表
List<ColumnTree> columnTrees = columnMapper.selectTreeInfo();
    //判斷是否有數據
        if (CollectionUtils.isNotEmpty(columnTrees)) {
            // 過濾所有的一級目錄,父id為0
            List<ColumnTree> firstColumn = columnTrees.stream().filter(c -> c.getParentId().toString().equals("0")).collect(Collectors.toList());

            //查出非一級目錄,按照其父id分類
            Map<Integer, List<ColumnTree>> collect = columnTrees.stream().filter(c -> !(c.getParentId().toString().equals("0"))).collect(Collectors.groupingBy(ColumnTree::getParentId));

            //遍歷一級目錄
            firstColumn.forEach(a -> {
                //如果一級目錄的id中是否包含非一級目錄的父id
                if (collect.get(a.getValue()) == null) {
                    //沒有,說明不是該一級目錄沒有下一級目錄,則將其子目錄設為空
                    a.setChildren(new ArrayList<>());
                } else {
                    //有,則說明有二級目錄,將二級目錄的的List集合,賦給子目錄
                    a.setChildren(collect.get(a.getValue()));

                    //構建三級樹
                    //遍歷二級目錄,判斷是否含有三級目錄
                    collect.get(a.getValue()).forEach(b -> {
                        if (collect.get(b.getValue()) == null) {
                            //沒有,將二級目錄下的三級目錄設為空
                            b.setChildren(new ArrayList<>());
                        } else {
                            //有,將三級目錄的List集合,賦給三級目錄
                            b.setChildren(collect.get(b.getValue()));
                        }
                    });
                }
            });
            //將firstColumn返回,前端可以通過遍歷獲取各級目錄的數據從而形成三級樹的效果
              return GlobalResponse.success(firstColumn);
        } else {
            return GlobalResponse.success(new ArrayList<>());
        }
      }


免責聲明!

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



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