From 8f84997e8e9325b2790c798084c8f7155dcb4aa0 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 25 Mar 2020 11:35:07 +0800 Subject: [PATCH] add extra for TreeNode --- .../cn/hutool/core/lang/tree/TreeNode.java | 29 +++++++++++++++++++ .../cn/hutool/core/lang/tree/TreeUtil.java | 22 +++++++------- .../lang/tree/parser/DefaultNodeParser.java | 19 +++++++----- .../cn/hutool/core/bean/BeanUtilTest.java | 5 +++- .../hutool/core/lang/{ => tree}/TreeTest.java | 13 ++++----- 5 files changed, 61 insertions(+), 27 deletions(-) rename hutool-core/src/test/java/cn/hutool/core/lang/{ => tree}/TreeTest.java (82%) 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); }