ソースを参照

add extra for TreeNode

Looly 5 年 前
コミット
8f84997e8e

+ 29 - 0
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}中被重命名<br>
  * 在你的项目里它可以是部门实体、地区实体等任意类树节点实体
@@ -31,6 +33,11 @@ public class TreeNode<T> implements Node<T> {
 	 */
 	private Comparable<?> weight = 0;
 
+	/**
+	 * 扩展字段
+	 */
+	private Map<String, Object> extra;
+
 
 	/**
 	 * 空构造
@@ -99,4 +106,26 @@ public class TreeNode<T> implements Node<T> {
 		this.weight = weight;
 		return this;
 	}
+
+	/**
+	 * 获取扩展字段
+	 *
+	 * @return 扩展字段Map
+	 * @since 5.2.5
+	 */
+	public Map<String, Object> getExtra() {
+		return extra;
+	}
+
+	/**
+	 * 设置扩展字段
+	 *
+	 * @param extra 扩展字段
+	 * @return this
+	 * @since 5.2.5
+	 */
+	public TreeNode<T> setExtra(Map<String, Object> extra) {
+		this.extra = extra;
+		return this;
+	}
 }

+ 11 - 11
hutool-core/src/main/java/cn/hutool/core/lang/tree/TreeUtil.java

@@ -64,24 +64,24 @@ public class TreeUtil {
 	 * @return List
 	 */
 	public static <T, E> List<Tree<E>> build(List<T> list, E parentId, TreeNodeConfig treeNodeConfig, NodeParser<T, E> nodeParser) {
-		final List<Tree<E>> treeNodes = CollUtil.newArrayList();
-		Tree<E> treeNode;
+		final List<Tree<E>> treeList = CollUtil.newArrayList();
+		Tree<E> 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<Tree<E>> finalTreeNodes = CollUtil.newArrayList();
-		for (Tree<E> node : treeNodes) {
+		List<Tree<E>> finalTreeList = CollUtil.newArrayList();
+		for (Tree<E> 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;
 	}
 
 	/**

+ 12 - 7
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<T> implements NodeParser<TreeNode<T>, T> {
 
 	@Override
-	public void parse(TreeNode<T> object, Tree<T> treeNode) {
-		treeNode.setId(object.getId());
-		treeNode.setParentId(object.getParentId());
-		treeNode.setWeight(object.getWeight());
-		treeNode.setName(object.getName());
+	public void parse(TreeNode<T> treeNode, Tree<T> 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<String, Object> extra = treeNode.getExtra();
+		if(MapUtil.isNotEmpty(extra)){
+			extra.forEach(tree::putExtra);
+		}
 	}
 }

+ 4 - 1
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<String, Object> 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;
 	}
 

+ 5 - 8
hutool-core/src/test/java/cn/hutool/core/lang/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<Tree<String>> treeNodes = TreeUtil.build(nodeList, "0");
-		for (Tree<String> tree : treeNodes) {
+		List<Tree<String>> treeList = TreeUtil.build(nodeList, "0");
+		for (Tree<String> tree : treeList) {
 			Assert.assertNotNull(tree);
+			Assert.assertEquals("0", tree.getParentId());
 		}
 
 		// 测试通过子节点查找父节点
-		final Tree<String> rootNode0 = treeNodes.get(0);
+		final Tree<String> rootNode0 = treeList.get(0);
 		final Tree<String> parent = rootNode0.getChildren().get(0).getParent();
 		Assert.assertEquals(rootNode0, parent);
 	}