获取树状


 private List<CompanyFrameTreeRespVO> buildTree(List<CompanyFrame> list) {

        // 1. 构建节点 Map
        Map<Long, CompanyFrameTreeRespVO> treeMap = list.stream()
                .map(this::convertToTreeVO)
                .collect(Collectors.toMap(CompanyFrameTreeRespVO::getId, node -> node));

        // 2. 构建树结构
        treeMap.values().stream()
                .filter(node -> node.getParentId() != null && !node.getParentId().equals(CompanyFrame.PARENT_ID_ROOT))
                .forEach(node -> Optional.ofNullable(treeMap.get(node.getParentId()))
                        .ifPresent(parent -> parent.getChildren().add(node)));

        // 3. 对子节点排序
        treeMap.values().stream()
                .filter(node -> !node.getChildren().isEmpty())
                .forEach(node -> node.getChildren().sort(Comparator.comparing(CompanyFrameTreeRespVO::getSort)));

        // 4. 获取根节点
        List<CompanyFrameTreeRespVO> rootList = treeMap.values().stream()
                .filter(node -> node.getParentId() == null
                        || node.getParentId().equals(DeptDO.PARENT_ID_ROOT))
                .collect(Collectors.toList());

        return rootList;
    }

    private CompanyFrameTreeRespVO convertToTreeVO(CompanyFrame companyFrame) {
        CompanyFrameTreeRespVO node = BeanUtils.toBean(companyFrame, CompanyFrameTreeRespVO.class);
        node.setChildren(new ArrayList<>());
        return node;
    }

posted @ 2025-07-12 10:48  Y云间雾  阅读(22)  评论(0)    收藏  举报