diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeNode.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeNode.java
index 9dd1ef0d8..26e7678fd 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeNode.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeNode.java
@@ -1,6 +1,8 @@
package cn.hutool.core.lang.tree;
+import java.util.Map;
+
/**
* 树节点 每个属性都可以在{@link TreeNodeConfig}中被重命名
* 在你的项目里它可以是部门实体、地区实体等任意类树节点实体
@@ -31,6 +33,11 @@ public class TreeNode implements Node {
*/
private Comparable> weight = 0;
+ /**
+ * 扩展字段
+ */
+ private Map extra;
+
/**
* 空构造
@@ -99,4 +106,26 @@ public class TreeNode implements Node {
this.weight = weight;
return this;
}
+
+ /**
+ * 获取扩展字段
+ *
+ * @return 扩展字段Map
+ * @since 5.2.5
+ */
+ public Map getExtra() {
+ return extra;
+ }
+
+ /**
+ * 设置扩展字段
+ *
+ * @param extra 扩展字段
+ * @return this
+ * @since 5.2.5
+ */
+ public TreeNode setExtra(Map extra) {
+ this.extra = extra;
+ return this;
+ }
}
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 92cd75aa8..3ec88e31b 100644
--- 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
@@ -64,24 +64,24 @@ public class TreeUtil {
* @return List
*/
public static List> build(List list, E parentId, TreeNodeConfig treeNodeConfig, NodeParser nodeParser) {
- final List> treeNodes = CollUtil.newArrayList();
- Tree treeNode;
+ final List> treeList = CollUtil.newArrayList();
+ Tree tree;
for (T obj : list) {
- treeNode = new Tree<>(treeNodeConfig);
- nodeParser.parse(obj, treeNode);
- treeNodes.add(treeNode);
+ tree = new Tree<>(treeNodeConfig);
+ nodeParser.parse(obj, tree);
+ treeList.add(tree);
}
- List> finalTreeNodes = CollUtil.newArrayList();
- for (Tree node : treeNodes) {
+ List> finalTreeList = CollUtil.newArrayList();
+ for (Tree node : treeList) {
if (parentId.equals(node.getParentId())) {
- finalTreeNodes.add(node);
- innerBuild(treeNodes, node, 0, treeNodeConfig.getDeep());
+ finalTreeList.add(node);
+ innerBuild(treeList, node, 0, treeNodeConfig.getDeep());
}
}
// 内存每层已经排过了 这是最外层排序
- finalTreeNodes = finalTreeNodes.stream().sorted().collect(Collectors.toList());
- return finalTreeNodes;
+ finalTreeList = finalTreeList.stream().sorted().collect(Collectors.toList());
+ return finalTreeList;
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/parser/DefaultNodeParser.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/parser/DefaultNodeParser.java
index dcdec6221..f5b38ad21 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/parser/DefaultNodeParser.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/parser/DefaultNodeParser.java
@@ -2,6 +2,9 @@ package cn.hutool.core.lang.tree.parser;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.map.MapUtil;
+
+import java.util.Map;
/**
* 默认的简单转换器
@@ -12,14 +15,16 @@ import cn.hutool.core.lang.tree.Tree;
public class DefaultNodeParser implements NodeParser, T> {
@Override
- public void parse(TreeNode object, Tree treeNode) {
- treeNode.setId(object.getId());
- treeNode.setParentId(object.getParentId());
- treeNode.setWeight(object.getWeight());
- treeNode.setName(object.getName());
+ public void parse(TreeNode treeNode, Tree tree) {
+ tree.setId(treeNode.getId());
+ tree.setParentId(treeNode.getParentId());
+ tree.setWeight(treeNode.getWeight());
+ tree.setName(treeNode.getName());
//扩展字段
- // treeNode.extra("other",11);
- // treeNode.extra("other2",object.getXXX);
+ final Map extra = treeNode.getExtra();
+ if(MapUtil.isNotEmpty(extra)){
+ extra.forEach(tree::putExtra);
+ }
}
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java
index 71ceafb5e..b1fa0d05d 100644
--- a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java
@@ -4,6 +4,7 @@ import cn.hutool.core.annotation.Alias;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.bean.copier.ValueProvider;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Console;
import cn.hutool.core.map.MapUtil;
import lombok.Getter;
import lombok.Setter;
@@ -150,8 +151,10 @@ public class BeanUtilTest {
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
+ person.setSlow(true);
Map map = BeanUtil.beanToMap(person);
+ Console.log(map);
Assert.assertEquals("sub名字", map.get("aliasSubName"));
}
@@ -299,9 +302,9 @@ public class BeanUtilTest {
@Getter
@Setter
public static class SubPersonWithAlias extends Person {
+ // boolean参数值非isXXX形式
@Alias("aliasSubName")
private String subName;
- // boolean参数值非isXXX形式
private Boolean slow;
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeTest.java
similarity index 82%
rename from hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java
rename to hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeTest.java
index 5803bdf37..a977451a8 100644
--- a/hutool-core/src/test/java/cn/hutool/core/lang/TreeTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/lang/tree/TreeTest.java
@@ -1,10 +1,6 @@
-package cn.hutool.core.lang;
+package cn.hutool.core.lang.tree;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.lang.tree.Tree;
-import cn.hutool.core.lang.tree.TreeNode;
-import cn.hutool.core.lang.tree.TreeNodeConfig;
-import cn.hutool.core.lang.tree.TreeUtil;
import org.junit.Assert;
import org.junit.Test;
@@ -33,13 +29,14 @@ public class TreeTest {
@Test
public void sampleTree() {
- List> treeNodes = TreeUtil.build(nodeList, "0");
- for (Tree tree : treeNodes) {
+ List> treeList = TreeUtil.build(nodeList, "0");
+ for (Tree tree : treeList) {
Assert.assertNotNull(tree);
+ Assert.assertEquals("0", tree.getParentId());
}
// 测试通过子节点查找父节点
- final Tree rootNode0 = treeNodes.get(0);
+ final Tree rootNode0 = treeList.get(0);
final Tree parent = rootNode0.getChildren().get(0).getParent();
Assert.assertEquals(rootNode0, parent);
}