项目遇到了无限层级数据结构,逻辑处理上有些误区,无意看到了这篇文章受益匪浅,分享一下这篇文章。
原文地址:https://blog.csdn.net/claram/article/details/54616485
在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示。本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结构的问题。如有不正之处,欢迎大家批评指正。
编程模型
我们以北京行政区划为例,讲解整个模型。
北京市:市辖区 县
市辖区:东城区 西城区 朝阳区 丰台区 石景山区 海淀区 门头沟区 房山区 通州区 顺义区 昌平区 大兴区 怀柔区 平谷区
县:密云县 延庆县
UML类图如下:
TreeNode:定义树的节点对象
nodeId:树节点Id。
nodeName:树节点名称。
parentNodeId:树节点父Id。
orderNum:节点在树中的排序号,在同一节点下进行排序。
level:当前树节点所在的层级,根节点为第一层。
parent:当前树节点的父节点。
children:当前树节点的儿子节点。
allChildren:当前树节点的子孙节点。
ITree:定义树对象要实现的方法。
getTree():以 List 形式返回树的所有的 TreeNode 对象。
getRoot():以 List 形式返回树的根节点,可能是一个或者多个。
getTreeNode(String nodeId):根据 nodeId 返回对应的 TreeNode 对象。
Tree:实现 ITree 接口,提供树的完整功能。
getTree():以 List 形式返回树的所有的 TreeNode 对象。
getRoot():以 List 形式返回树的根节点,可能是一个或者多个。
getTreeNode(String nodeId):根据 nodeId 返回对应的 TreeNode 对象。
ITreeNode:定义模板方法,构造树形结构的类要实现该接口,Tree 通过调用该接口中的方法获取 nodeId nodeName parentNodeId orderNum 数据。
getNodeId():获取树节点Id。
getNodeName():获取树节点名称。
getParentNodeId():获取树节点父Id。
getOrderNum():获取节点在树中的排序号,在同一节点下进行排序。
Org:定义行政区划类,实现 ItreeNode 接口。
实现代码
TreeNode类
ITree接口
Tree类
Org类
TreeDemo执行测试返回结果
Maven依赖
0条评论
点击登录参与评论