From 6196f83caa6e74c0896f3fd60a2aeb0adbbc7be2 Mon Sep 17 00:00:00 2001 From: duhanmin Date: Tue, 16 Aug 2022 14:45:32 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Tree=20add=20=E7=B1=BB=E5=9E=8B=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/lang/tree/TreeBuilder.java | 26 ++++++ .../cn/hutool/core/lang/tree/TreeUtil.java | 2 +- .../hutool/core/lang/tree/Issues2538Test.java | 91 +++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/lang/tree/Issues2538Test.java diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java index ebc1e0c13..6f7189ab7 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java @@ -171,6 +171,32 @@ public class TreeBuilder implements Builder> { return append(map); } + /** + * 增加节点列表,增加的节点是不带子节点的 + * + * @param list Bean列表 + * @param Bean类型 + * @param nodeParser 节点转换器,用于定义一个Bean如何转换为Tree节点 + * @return this + */ + public TreeBuilder append(List list, E rootId, NodeParser nodeParser) { + checkBuilt(); + + final TreeNodeConfig config = this.root.getConfig(); + final Map> map = new LinkedHashMap<>(list.size(), 1); + Tree node; + for (T t : list) { + node = new Tree<>(config); + nodeParser.parse(t, node); + if (!rootId.getClass().equals(node.getId().getClass())) { + throw new IllegalArgumentException("rootId type is node.getId().getClass()!"); + } + map.put(node.getId(), node); + } + return append(map); + } + + /** * 重置Builder,实现复用 diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java index 705cd1086..fb69fb2b8 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java @@ -123,7 +123,7 @@ public class TreeUtil { */ public static Tree buildSingle(List list, E rootId, TreeNodeConfig treeNodeConfig, NodeParser nodeParser) { return TreeBuilder.of(rootId, treeNodeConfig) - .append(list, nodeParser).build(); + .append(list, rootId, nodeParser).build(); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/tree/Issues2538Test.java b/hutool-core/src/test/java/cn/hutool/core/lang/tree/Issues2538Test.java new file mode 100644 index 000000000..58c2ccc74 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/lang/tree/Issues2538Test.java @@ -0,0 +1,91 @@ +package cn.hutool.core.lang.tree; + +import org.junit.Assert; + +import java.util.ArrayList; +import java.util.List; + +public class Issues2538Test { + + @org.junit.Test + public void issues2538Test() { + Test test1 = new Test(); + test1.setId(1); + test1.setParentId(0); + test1.setName("1"); + Test test2 = new Test(); + test2.setId(2); + test2.setParentId(1); + test2.setName("1"); + + List list = new ArrayList<>(); + + list.add(test1); + list.add(test2); + // 配置 + TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); + // 自定义属性名 都要默认值的 + treeNodeConfig.setIdKey("id"); + treeNodeConfig.setDeep(Integer.MAX_VALUE); + treeNodeConfig.setParentIdKey("parentId"); + + // 转换器 + List> treeNodes = TreeUtil.build(list, 0L, + treeNodeConfig, + (treeNode, tree) -> { + tree.setId(treeNode.getId()); + tree.setParentId(treeNode.getParentId()); + tree.setName(treeNode.getName()); + tree.setWeight(null); + }); + + Assert.assertNotNull(treeNodes); + + try { + // 转换器 + treeNodes = TreeUtil.build(list, "0", + treeNodeConfig, + (treeNode, tree) -> { + tree.setId(treeNode.getId()); + tree.setParentId(treeNode.getParentId()); + tree.setName(treeNode.getName()); + tree.setWeight(null); + }); + }catch (Exception e) { + Assert.assertEquals(e.getClass(), IllegalArgumentException.class); + } + } + + public static class Test { + + private long id; + + private long parentId; + + private String name; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getParentId() { + return parentId; + } + + public void setParentId(long parentId) { + this.parentId = parentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} From 50dc4f7a188cb963ae9e1cbd2c1249d5149a1859 Mon Sep 17 00:00:00 2001 From: duhanmin Date: Tue, 16 Aug 2022 14:55:56 +0800 Subject: [PATCH 2/2] del --- .../src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java index 6f7189ab7..c315de921 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeBuilder.java @@ -196,8 +196,6 @@ public class TreeBuilder implements Builder> { return append(map); } - - /** * 重置Builder,实现复用 *