首页 > 其他分享 >构建树状结构工具类

构建树状结构工具类

时间:2023-04-20 15:59:25浏览次数:38  
标签:nodeList 树状 TreeNode List public 构建 treeNode 工具 节点

实体类

@Data
public class TreeNode {
    /** 节点ID */
    private Integer id;

    /** 父节点ID:顶级节点为0 */
    private Integer parentId;

    /** 节点名称 */
    private String label;

    /** 子节点 */
    private List<TreeNode> children;

    /**
     * 网点id
     */
    private Integer bankId;

    public TreeNode(Integer id, Integer parentId, String label, Integer bankId) {
        this.id = id;
        this.parentId = parentId;
        this.label = label;
        this.bankId = bankId;
    }
}

具体实现工具类

public class TreeBuild {

    // 保存参与构建树形的所有数据(通常数据库查询结果)
    public List<TreeNode> nodeList = new ArrayList<>();

    /**
     *  构造方法
     *  @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
     */
    public TreeBuild(List<TreeNode> nodeList){
        this.nodeList = nodeList;
    }

    /**
     *   获取需构建的所有根节点(顶级节点) "0"
     *   @return 所有根节点List集合
     */
    public List<TreeNode> getRootNode(){
        // 保存所有根节点(所有根节点的数据)
        List<TreeNode> rootNodeList = new ArrayList<>();
        // treeNode:查询出的每一条数据(节点)
        for (TreeNode treeNode : nodeList){
            // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
            if (0 == treeNode.getParentId()) {
                // 是,添加
                rootNodeList.add(treeNode);
            }
        }
        return rootNodeList;
    }

    /**
     *  根据每一个顶级节点(根节点)进行构建树形结构
     *  @return  构建整棵树
     */
    public List<TreeNode> buildTree(){
        // treeNodes:保存一个顶级节点所构建出来的完整树形
        List<TreeNode> treeNodes = new ArrayList<TreeNode>();
        // getRootNode():获取所有的根节点
        for (TreeNode treeRootNode : getRootNode()) {
            // 将顶级节点进行构建子树
            treeRootNode = buildChildTree(treeRootNode);
            // 完成一个顶级节点所构建的树形,增加进来
            treeNodes.add(treeRootNode);
        }
        return treeNodes;
    }

    /**
     *  递归-----构建子树形结构
     *  @param  pNode 根节点(顶级节点)
     *  @return 整棵树
     */
    public TreeNode buildChildTree(TreeNode pNode){
        List<TreeNode> childTree = new ArrayList<TreeNode>();
        // nodeList:所有节点集合(所有数据)
        for (TreeNode treeNode : nodeList) {
            // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
            if (treeNode.getParentId().equals(pNode.getId())) {
                // 再递归进行判断当前节点的情况,调用自身方法
                childTree.add(buildChildTree(treeNode));
            }
        }
        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
        pNode.setChildren(childTree);
        return pNode;
    }

 

标签:nodeList,树状,TreeNode,List,public,构建,treeNode,工具,节点
From: https://www.cnblogs.com/xiaoyanger-study/p/17337110.html

相关文章

  • 48 结束语 | 点线网面,一起构建MySQL知识网络
    时光流逝,这是专栏的最后一篇文章。回顾整个过程,如果用一个词来描述,就是“没料到”:我没料到文章这么难写,似乎每一篇文章都要用尽所学;我没料到评论这么精彩,以致于我花在评论区的时间并不比正文少;我没料到收获这么大,每一次被评论区的提问问到盲点,都会带着久违的兴奋去分析代码。......
  • 系统文件管理工具:Path Finder 中文激活版
    PathFinder是一款Mac平台上的文件管理和操作工具,提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件,以及进行各种高级操作。PathFinder的主要功能包括:-文件浏览:可以快速浏览文件夹、文件和磁盘,并支持多标签页和侧边栏视图......
  • SATI 文献题录信息统计分析工具
    SATI支持以下数据分析任务:   多种数据清洗工具:文献去重、词干提取、应用停用词、智能清洗等。   提取高频字段,并输出频次排名列表。   基于高频字段生成时间序列图,可输出下载时间序列数据。   构建高频字段共现矩阵,并输出Excel/TSV格式矩阵。   自动基于共现......
  • 低代码开发重要工具:jvs-logic(逻辑引擎)可视化设计要素
    逻辑引擎可视化的交互可视化的服务编排是逻辑引擎的核心功能,逻辑引擎的界面可视化设计是为了方便用户使用和操作逻辑引擎而设计的。一个好的界面设计能够提高用户的工作效率和使用体验,同时也能增加软件的可靠性和可维护性。以下是逻辑引擎界面可视化设计的一些要素:1.界面布局界面......
  • IE开发人员工具无法使用
    第一种情况:开发人员工具只在任务栏显示,桌面上看不到(我遇到的是这种情况,解决方法如下)将鼠标放在任务栏的开发者工具,出现缩略图,也就是任务栏上方的预览图,可以看到开发人员工具是显示一片透明的区域,选中之后怎么都出不来。这时将鼠标移到那个开发人员工具的缩略图上,注意,是缩略图,不是......
  • 使用 OpenCV4 和 C++ 构建计算机视觉项目:1~5
    原文:BuildingComputerVisionProjectswithOpenCV4andC++协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN计算机视觉译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。当别人说你没有底线的时候,你最好真的没有;当别人说你做过某些事的时候,你也最好真的做过。一、Open......
  • 得一微ys9082hc、ys9082hp怎么量产,ys9082hc量产工具,ys9082hp开卡软件,ys9082hc使用量产
    固态硬盘(SSD)作为一种新型的存储设备,速度快、耐久、稳定性高,成为了许多玩家和用户首选的硬盘。那么对于损坏的、电脑打不开的SSD,可以使用量产开卡的方法进行修复,类似于恢复出厂设置,那如何进行开卡呢?今天我们来介绍使用量产工具进行固态开卡的教程。以得一微YS9082HC主控的固态来说:......
  • Squirrel 类似clickonce 的工具
    微软的clickonce是一个比较强大的软件更新以及分发模式,Squirrel是一个开源的类似的工具,提供的功能相比clickonce多了不少,对于windows桌面应用的分发是一个值得选择的工具参考资料https://github.com/Squirrel/Squirrel.Windowshttps://learn.microsoft.com/en-us/visualstud......
  • 盘点五款轻松提升团队目标感的管理工具
    在现代工作中,有许多目标需要实现,无论是团队还是个人目标。为了更好地管理这些目标,许多公司和组织都选择使用目标管理软件,以实现更加高效和协同的工作流程。今天推荐5款个人和团队都适用的目标管理软件,帮助大家更好达成目标。1、飞项:飞项是一款提供团队、个人和项目目标管理功能......
  • 【Linux】基础开发工具使用 --- vim
    目录前言vim的基本概念具体操作插入模式命令模式下的指令底行模式下的指令vim的配置前言......