From 7233415d30e0e897cd9cc11894f8b12c9ce7389a Mon Sep 17 00:00:00 2001 From: wanggongfeng <1305282856@qq.com> Date: Tue, 8 Dec 2020 10:37:03 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=BD=91=E6=A0=BC=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E5=8C=96=E8=BF=90=E4=BD=9C=E6=89=93=E5=88=86=E3=80=91=E8=80=83?= =?UTF-8?q?=E6=A0=B8=E9=A1=B9=E9=85=8D=E7=BD=AE=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=8E=8B=E5=85=AC=E5=B3=B0-2020-12-08?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epdc/commons/tools/utils/TreeNodeNew.java | 39 ++++++++++ .../commons/tools/utils/TreeUtilsNew.java | 72 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeNodeNew.java create mode 100644 epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeUtilsNew.java diff --git a/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeNodeNew.java b/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeNodeNew.java new file mode 100644 index 0000000..01494fe --- /dev/null +++ b/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeNodeNew.java @@ -0,0 +1,39 @@ +package com.elink.esua.epdc.commons.tools.utils; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class TreeNodeNew implements Serializable { + private static final long serialVersionUID = 1L; + private String id; + private String pid; + private List children = new ArrayList(); + + public TreeNodeNew() { + } + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPid() { + return this.pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public List getChildren() { + return this.children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeUtilsNew.java b/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeUtilsNew.java new file mode 100644 index 0000000..7abdda7 --- /dev/null +++ b/epdc-commons-tools/src/main/java/com/elink/esua/epdc/commons/tools/utils/TreeUtilsNew.java @@ -0,0 +1,72 @@ +package com.elink.esua.epdc.commons.tools.utils; + +import com.elink.esua.epdc.commons.tools.validator.AssertUtils; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 树形结构工具类,如:菜单、部门等 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +public class TreeUtilsNew { + + /** + * 根据pid,构建树节点 + */ + public static List build(List treeNodes, Long pid) { + //pid不能为空 + AssertUtils.isNull(pid, "pid"); + + List treeList = new ArrayList<>(); + for (T treeNode : treeNodes) { + if (pid.equals(treeNode.getPid())) { + treeList.add(findChildren(treeNodes, treeNode)); + } + } + + return treeList; + } + + /** + * 查找子节点 + */ + private static T findChildren(List treeNodes, T rootNode) { + for (T treeNode : treeNodes) { + if (rootNode.getId().equals(treeNode.getPid())) { + rootNode.getChildren().add(findChildren(treeNodes, treeNode)); + } + } + return rootNode; + } + + /** + * 构建树节点 + */ + public static List build(List treeNodes) { + List result = new ArrayList<>(); + + //list转map + Map nodeMap = new LinkedHashMap<>(treeNodes.size()); + for (T treeNode : treeNodes) { + nodeMap.put(treeNode.getId(), treeNode); + } + + for (T node : nodeMap.values()) { + T parent = nodeMap.get(node.getPid()); + if (parent != null && !(node.getId().equals(parent.getId()))) { + parent.getChildren().add(node); + continue; + } + + result.add(node); + } + + return result; + } +} +