From b71ca1e9572c5b3a087089398920994107a532f0 Mon Sep 17 00:00:00 2001 From: bns_han <1604366271@qq.com> Date: Fri, 22 Dec 2023 15:57:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0-=E9=80=80=E6=96=99=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E4=B8=8E=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sgzb/material/domain/TypeTreeNode.java | 29 +++++++ .../bonus/sgzb/material/vo/TypeTreeBuild.java | 79 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/domain/TypeTreeNode.java create mode 100644 sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/vo/TypeTreeBuild.java diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/domain/TypeTreeNode.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/domain/TypeTreeNode.java new file mode 100644 index 00000000..dcfa8702 --- /dev/null +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/domain/TypeTreeNode.java @@ -0,0 +1,29 @@ +package com.bonus.sgzb.material.domain; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 下拉树-实体类 + */ +@Data +public class TypeTreeNode { + + private long typeId; + + private long parentId; + + private String num; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String level; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String typeName; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children = new ArrayList<>(); +} diff --git a/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/vo/TypeTreeBuild.java b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/vo/TypeTreeBuild.java new file mode 100644 index 00000000..7726dec9 --- /dev/null +++ b/sgzb-modules/sgzb-material/src/main/java/com/bonus/sgzb/material/vo/TypeTreeBuild.java @@ -0,0 +1,79 @@ +package com.bonus.sgzb.material.vo; + +import com.bonus.sgzb.material.domain.TypeTreeNode; + +import java.util.ArrayList; +import java.util.List; + +/** + * BuildTree 构建树形结构 + * @author 10488 + */ +public class TypeTreeBuild { + + public List nodeList = new ArrayList<>(); + + /** + * 构造方法 + * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。 + */ + public TypeTreeBuild(List nodeList){ + this.nodeList = nodeList; + } + + /** + * 获取需构建的所有根节点(顶级节点) "0" + * @return 所有根节点List集合 + */ + public List getRootNode(){ + // 保存所有根节点(所有根节点的数据) + List rootNodeList = new ArrayList<>(); + // treeNode:查询出的每一条数据(节点) + for (TypeTreeNode treeNode : nodeList){ + // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。 + if (0 == treeNode.getParentId()) { + // 是,添加 + rootNodeList.add(treeNode); + } + } + return rootNodeList; + } + + /** + * 根据每一个顶级节点(根节点)进行构建树形结构 + * @return 构建整棵树 + */ + public List buildTree(){ + // treeNodes:保存一个顶级节点所构建出来的完整树形 + List treeNodes = new ArrayList(); + // getRootNode():获取所有的根节点 + for (TypeTreeNode treeRootNode : getRootNode()) { + // 将顶级节点进行构建子树 + treeRootNode = buildChildTree(treeRootNode); + // 完成一个顶级节点所构建的树形,增加进来 + treeNodes.add(treeRootNode); + } + return treeNodes; + } + + /** + * 递归-----构建子树形结构 + * @param pNode 根节点(顶级节点) + * @return 整棵树 + */ + public TypeTreeNode buildChildTree(TypeTreeNode pNode){ + List childTree = new ArrayList(); + // nodeList:所有节点集合(所有数据) + for (TypeTreeNode treeNode : nodeList) { + // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点 + if (treeNode.getParentId() == pNode.getTypeId()) { + // 再递归进行判断当前节点的情况,调用自身方法 + childTree.add(buildChildTree(treeNode)); + } + } + // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果 + pNode.setChildren(childTree); + return pNode; + } + +}