From b7714ba53ab4262e0044599a73641923adb09ff7 Mon Sep 17 00:00:00 2001 From: stylefeng Date: Wed, 11 Dec 2024 15:29:10 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.3.3=E3=80=91=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=A0=91=E8=8A=82=E7=82=B9=E6=8E=92=E5=BA=8F=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tree/factory/SortedTreeBuildFactory.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/tree/factory/SortedTreeBuildFactory.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/tree/factory/SortedTreeBuildFactory.java index 6bb2311ff..a82a7e612 100644 --- a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/tree/factory/SortedTreeBuildFactory.java +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/tree/factory/SortedTreeBuildFactory.java @@ -28,9 +28,12 @@ import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractSortedTreeNode; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; /** * 带排序功能的树构造器 @@ -54,22 +57,14 @@ public class SortedTreeBuildFactory> extends public List doTreeBuild(List nodes) { // 先对列表进行排序 - nodes.sort(Comparator.comparing(AbstractSortedTreeNode::getSort)); + nodes.sort(Comparator.comparing(m -> Optional.ofNullable((m).getSort()).orElse(new BigDecimal(Integer.MAX_VALUE)))); // 将每个节点构造一个子树 for (T treeNode : nodes) { this.buildChildNodes(nodes, treeNode, new ArrayList<>()); } - // 只保留上级是根节点的节点,也就是只留下所有一级节点 - ArrayList results = new ArrayList<>(); - for (T node : nodes) { - if (node.getNodeParentId().equals(getRootParentId())) { - results.add(node); - } - } - - return results; + return findTops(nodes); } @Override @@ -81,7 +76,7 @@ public class SortedTreeBuildFactory> extends List nodeSubLists = getSubChildsLevelOne(totalNodes, node); // 对子节点进行排序 - nodeSubLists.sort(Comparator.comparing(AbstractSortedTreeNode::getSort)); + nodeSubLists.sort(Comparator.comparing(m -> Optional.ofNullable((m).getSort()).orElse(new BigDecimal(Integer.MAX_VALUE)))); if (!nodeSubLists.isEmpty()) { for (T nodeSubList : nodeSubLists) { @@ -93,4 +88,13 @@ public class SortedTreeBuildFactory> extends node.setChildrenNodes(childNodeLists); } + private List findTops(List nodes) { + + List parents = nodes.stream().filter((a) -> null != a.getNodeParentId()).collect(Collectors.toList()); + + List entityIds = nodes.stream().map(AbstractSortedTreeNode::getNodeId).collect(Collectors.toList()); + + return parents.stream().filter((a) -> !entityIds.contains(a.getNodeParentId())).distinct().collect(Collectors.toList()); + } + }