mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
add extra for TreeNode
This commit is contained in:
parent
308368cffd
commit
8f84997e8e
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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,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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user