From 2e98b20bea4463e4465e3c19059d0744a09aec06 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 27 Jun 2023 14:34:41 +0800
Subject: [PATCH] gb28181版本升级-补充
---
src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java b/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java
new file mode 100644
index 0000000..8df6f50
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/utils/node/ForestNodeMerger.java
@@ -0,0 +1,51 @@
+package com.genersoft.iot.vmp.utils.node;
+
+import com.genersoft.iot.vmp.utils.CollectionUtil;
+
+import java.util.List;
+
+/**
+ * 森林节点归并类
+ *
+ */
+public class ForestNodeMerger {
+
+ /**
+ * 将节点数组归并为一个森林(多棵树)(填充节点的children域)
+ * 时间复杂度为O(n^2)
+ *
+ * @param items 节点域
+ * @return 多棵树的根节点集合
+ */
+ public static <T extends INode<T>> List<T> merge(List<T> items) {
+ ForestNodeManager<T> forestNodeManager = new ForestNodeManager<>(items);
+ items.forEach(forestNode -> {
+ if (forestNode.getParentId() != null) {
+ INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
+ if (node != null) {
+ node.getChildren().add(forestNode);
+ } else {
+ forestNodeManager.addParentId(forestNode.getChannelId());
+ }
+ }
+ });
+ return forestNodeManager.getRoot();
+ }
+
+ public static <T extends INode<T>> List<T> merge(List<T> items, String[] parentIds) {
+ ForestNodeManager<T> forestNodeManager = new ForestNodeManager<>(items);
+ items.forEach(forestNode -> {
+ if (forestNode.getParentId() != null) {
+ INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
+ if (CollectionUtil.contains(parentIds, forestNode.getChannelId())){
+ forestNodeManager.addParentId(forestNode.getChannelId());
+ } else {
+ if (node != null){
+ node.getChildren().add(forestNode);
+ }
+ }
+ }
+ });
+ return forestNodeManager.getRoot();
+ }
+}
--
Gitblit v1.9.3