From f9b7d955aa56454039cb87fa58bbea37d38b917e Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: 星期二, 10 九月 2024 10:15:01 +0800
Subject: [PATCH] add 新增TreeUtil获取节点列表中所有节点的叶子节点
---
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
index d0163e6..8e501df 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
@@ -5,11 +5,13 @@
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.lang.tree.parser.NodeParser;
-import org.dromara.common.core.utils.reflect.ReflectUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.dromara.common.core.utils.reflect.ReflectUtils;
import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* 鎵╁睍 hutool TreeUtil 灏佽绯荤粺鏍戞瀯寤�
@@ -24,12 +26,54 @@
*/
public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label");
+ /**
+ * 鏋勫缓鏍戝舰缁撴瀯
+ *
+ * @param <T> 杈撳叆鑺傜偣鐨勭被鍨�
+ * @param <K> 鑺傜偣ID鐨勭被鍨�
+ * @param list 鑺傜偣鍒楄〃锛屽叾涓寘鍚簡瑕佹瀯寤烘爲褰㈢粨鏋勭殑鎵�鏈夎妭鐐�
+ * @param nodeParser 瑙f瀽鍣紝鐢ㄤ簬灏嗚緭鍏ヨ妭鐐硅浆鎹负鏍戣妭鐐�
+ * @return 鏋勫缓濂界殑鏍戝舰缁撴瀯鍒楄〃
+ */
public static <T, K> List<Tree<K>> build(List<T> list, NodeParser<T, K> nodeParser) {
if (CollUtil.isEmpty(list)) {
- return null;
+ return CollUtil.newArrayList();
}
K k = ReflectUtils.invokeGetter(list.get(0), "parentId");
return TreeUtil.build(list, k, DEFAULT_CONFIG, nodeParser);
}
+ /**
+ * 鑾峰彇鑺傜偣鍒楄〃涓墍鏈夎妭鐐圭殑鍙跺瓙鑺傜偣
+ *
+ * @param <K> 鑺傜偣ID鐨勭被鍨�
+ * @param nodes 鑺傜偣鍒楄〃
+ * @return 鍖呭惈鎵�鏈夊彾瀛愯妭鐐圭殑鍒楄〃
+ */
+ public static <K> List<Tree<K>> getLeafNodes(List<Tree<K>> nodes) {
+ if (CollUtil.isEmpty(nodes)) {
+ return CollUtil.newArrayList();
+ }
+ return nodes.stream()
+ .flatMap(TreeBuildUtils::extractLeafNodes)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 鑾峰彇鎸囧畾鑺傜偣涓嬬殑鎵�鏈夊彾瀛愯妭鐐�
+ *
+ * @param <K> 鑺傜偣ID鐨勭被鍨�
+ * @param node 瑕佹煡鎵惧彾瀛愯妭鐐圭殑鏍硅妭鐐�
+ * @return 鍖呭惈鎵�鏈夊彾瀛愯妭鐐圭殑鍒楄〃
+ */
+ private static <K> Stream<Tree<K>> extractLeafNodes(Tree<K> node) {
+ if (!node.hasChild()) {
+ return Stream.of(node);
+ } else {
+ // 閫掑綊璋冪敤锛岃幏鍙栨墍鏈夊瓙鑺傜偣鐨勫彾瀛愯妭鐐�
+ return node.getChildren().stream()
+ .flatMap(TreeBuildUtils::extractLeafNodes);
+ }
+ }
+
}
--
Gitblit v1.9.3