通过栈实现树状结构List的查找+遍历+树形结构转换

通过栈实现树状结构List的查找和遍历

public List<TreeNodeDO> selectOrganizationTree(List<TreeNodeDO> nodeList) {
    
    
    Map<Long, List<TreeNodeDO>> groupMap = nodeList.stream().collect(Collectors.groupingBy(TreeNodeDO::getParentId));
    nodeList.forEach(organization-> {
    
    
        organization.setChildren(groupMap.get(organization.getId()));
    });
    List<TreeNodeDO> collect = nodeList.stream().filter(organization-> organization.getParentId().equals(0L)).collect(Collectors.toList());
    return collect;
}

/**
     * 通过栈方式获取树形结构中指定的树节点
     *
     * @param nodeDOList
     * @param dicCode
     * @return
     */
    private TreeNodeDO getTreeNodeDO(List<TreeNodeDO> nodeDOList, String dicCode) {
    
    
        Stack<List<TreeNodeDO>> stack = new Stack<>();
        stack.push(nodeDOList);
        while (!stack.isEmpty()) {
    
    
            List<TreeNodeDO> list = stack.pop();
            for (TreeNodeDO nodeDO : list) {
    
    
                if (nodeDO.getCode().equals(dicCode)) {
    
    
                    return nodeDO;
                }
                if (CollectionUtils.isNotEmpty(nodeDO.getChildren())) {
    
    
                    stack.push(nodeDO.getChildren());
                }
            }
        }
        return null;
    }

    /**
     * 通过栈方式提取树形结构中树节点转为map
     *
     * @param nodeDOList
     * @param map
     * @return
     */
    private void getTreeNodeDOMap(List<TreeNodeDO> nodeDOList, Map<String, String> map) {
    
    
        Stack<List<TreeNodeDO>> stack = new Stack<>();
        stack.push(nodeDOList);
        while (!stack.isEmpty()) {
    
    
            List<TreeNodeDO> list = stack.pop();
            for (TreeNodeDO nodeDO : list) {
    
    
                map.put(nodeDO.getCode(), nodeDO.getName());
                if (CollectionUtils.isNotEmpty(nodeDO.getChildren())) {
    
    
                    stack.push(nodeDO.getChildren());
                }
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/xukaiqiang123/article/details/129418509