list组装转化为树形结构list

/**
     * 使用递归方法构建分区树
     * @param dtoList
     * @param level0Root
     * @return
     */
    public static List<DtoList> buildDmaTree(List<DtoList> dtoList, boolean level0Root) {
        List<DtoList> trees = new ArrayList<>();

        List<Integer> rootIdList = (level0Root ?  getDmaLvl0Root(dtoList): getDmaInfoRoots(dtoList));
        for (DtoList dto : dtoList) {
            if (rootIdList.contains(dto.getId())) {
                trees.add(findDmaChildren(dto, dtoList));
            }
        }
        return trees;
    }



    /**
     * 查找分区根节点(直接根据父节点ID来判断)
     *
     * @param dtoList
     */
    private static List<Integer> getDmaLvl0Root(List<DtoList> dtoList) {
        List<Integer> rootIdList = new ArrayList<>();
        for(DtoList dto : dtoList) {
            if(dto.getXdiLevel() == 0) {
                rootIdList.add(dto.getId());
                break;
            }
        }
        return rootIdList;
    }

    /**
     * 查找分区根节点(因用户权限的原因,所以不能直接根据父节点ID来判断)
     *
     * @param dtoList
     */
    private static List<Integer> getDmaInfoRoots(List<DtoList> dtoList) {
        List<Integer> rootIdList = new ArrayList<>();
        Map<Integer, DtoList> dtoMap = dtoList.stream().collect(Collectors.toMap(DtoList::getId, v -> v, (v1, v2) -> v1));
        for(DtoList dto : dtoList) {
            if(dto.getParentId() <= 0) {
                rootIdList.add(dto.getId());
                continue;
            }
            if(!dtoMap.containsKey(dto.getParentId())) {
                rootIdList.add(dto.getId());
                continue;
            }
        }
        return rootIdList;
    }


    /**
     * 递归查找分区子节点
     * @param dtoList
     * @return
     */
    private static DtoList findDmaChildren(DtoList dto, List<DtoList> dtoList) {
        for (DtoList it : dtoList) {
            if(it.getParentId() > 0 && dto.getId().equals(it.getParentId())) {
                dto.setLeaf(false);
                dto.getChildren().add(findDmaChildren(it, dtoList));
            }
        }
        if(dto.getChildren().size() <= 0) {
            dto.setChildren(null);
        }
        return dto;
    }

猜你喜欢

转载自blog.csdn.net/m1195900241/article/details/125067627
今日推荐