Package | Description |
---|---|
org.dromara.hutool.core.tree |
提供通用树生成,特点:
1、每个字段可自定义
2、支持排序 树深度配置,自定义转换器等 3、支持额外属性扩展 4、贴心 许多属性,特性都有默认值处理 5、使用简单 可一行代码生成树 6、代码简洁轻量无额外依赖 |
org.dromara.hutool.core.tree.parser |
节点解析器封装
|
Modifier and Type | Method and Description |
---|---|
MapTree<T> |
MapTree.addChildren(MapTree<T>... children)
增加子节点,同时关联子节点的父节点为当前节点
|
MapTree<E> |
TreeBuilder.build() |
static <T,E> MapTree<E> |
TreeUtil.buildSingle(Iterable<T> list,
E parentId,
NodeParser<T,E> nodeParser)
构建单root节点树
它会将指定Id的节点作为根节点,如果这个节点不存在,则创建一个空节点,然后逐级增加子节点。 |
static <T,E> MapTree<E> |
TreeUtil.buildSingle(Iterable<T> list,
E rootId,
TreeNodeConfig treeNodeConfig,
NodeParser<T,E> nodeParser)
构建单root节点树
它会生成一个以指定ID为ID的空的节点,然后逐级增加子节点。 |
static <E> MapTree<E> |
TreeUtil.buildSingle(Iterable<TreeNode<E>> list,
E parentId)
构建单root节点树
它会生成一个以指定ID为ID的空的节点,然后逐级增加子节点。 |
static MapTree<Integer> |
TreeUtil.buildSingle(Iterable<TreeNode<Integer>> list)
构建单root节点树
|
static <E> MapTree<E> |
TreeUtil.buildSingle(Map<E,MapTree<E>> map,
E rootId)
单点树构建,按照权重排序
它会生成一个以指定ID为ID的空的节点,然后逐级增加子节点。 |
MapTree<T> |
MapTree.cloneTree()
递归克隆当前节点(即克隆整个树,保留字段值)
注意,此方法只会克隆节点,节点属性如果是引用类型,不会克隆 |
static <E> MapTree<E> |
TreeUtil.createEmptyNode(E id)
获取所有父节点ID列表
比如有个人在研发1部,他上面有研发部,接着上面有技术中心
parent = parent.getParent();) { if(null ! |
MapTree<T> |
MapTree.filter(Predicate<MapTree<T>> predicate)
递归过滤当前树,注意此方法会修改当前树
通过 Predicate 指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点及其所有子节点,否则抛弃节点及其子节点 |
MapTree<T> |
MapTree.filterNew(Predicate<MapTree<T>> predicate)
递归过滤并生成新的树
通过 Predicate 指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点 |
static <T> MapTree<T> |
TreeUtil.getNode(MapTree<T> node,
T id)
获取ID对应的节点,如果有多个ID相同的节点,只返回第一个。
|
MapTree<T> |
MapTree.getNode(T id)
获取ID对应的节点,如果有多个ID相同的节点,只返回第一个。
|
MapTree<T> |
MapTree.getParent()
获取父节点
|
MapTree<T> |
MapTree.setChildren(List<MapTree<T>> children)
设置子节点,设置后会覆盖所有原有子节点
|
MapTree<T> |
MapTree.setId(T id) |
MapTree<T> |
MapTree.setName(CharSequence name) |
MapTree<T> |
MapTree.setParent(MapTree<T> parent)
设置父节点
|
MapTree<T> |
MapTree.setParentId(T parentId) |
MapTree<T> |
MapTree.setWeight(Comparable<?> weight) |
Modifier and Type | Method and Description |
---|---|
static <T,E> List<MapTree<E>> |
TreeUtil.build(Iterable<T> list,
E parentId,
NodeParser<T,E> nodeParser)
树构建
你所有节点的ID都不应该重复,那你要构建一个列表形式的树结构,指定的这个rootId应该是首层节点的parentId,而非某个节点的id |
static <T,E> List<MapTree<E>> |
TreeUtil.build(Iterable<T> list,
E rootId,
TreeNodeConfig treeNodeConfig,
NodeParser<T,E> nodeParser)
树构建
你所有节点的ID都不应该重复,那你要构建一个列表形式的树结构,指定的这个rootId应该是首层节点的parentId,而非某个节点的id |
static <E> List<MapTree<E>> |
TreeUtil.build(Iterable<TreeNode<E>> list,
E parentId)
树构建
|
static List<MapTree<Integer>> |
TreeUtil.build(Iterable<TreeNode<Integer>> list)
树构建
|
static <E> List<MapTree<E>> |
TreeUtil.build(Map<E,MapTree<E>> map,
E rootId)
树构建,按照权重排序
|
List<MapTree<E>> |
TreeBuilder.buildList()
构建树列表,没有顶层节点,例如:
-用户管理
-用户管理
+用户添加
- 部门管理
-部门管理
+部门添加
|
List<MapTree<T>> |
MapTree.getChildren()
获取所有子节点
|
static <E> List<MapTree<E>> |
TreeUtil.toList(MapTree<E> root,
boolean broadFirst)
深度优先,遍历树,将树换为数组
|
Modifier and Type | Method and Description |
---|---|
MapTree<T> |
MapTree.addChildren(MapTree<T>... children)
增加子节点,同时关联子节点的父节点为当前节点
|
static <T> MapTree<T> |
TreeUtil.getNode(MapTree<T> node,
T id)
获取ID对应的节点,如果有多个ID相同的节点,只返回第一个。
|
static <T,E> List<E> |
TreeUtil.getParents(MapTree<T> node,
boolean includeCurrentNode,
Function<MapTree<T>,E> fieldFunc)
获取所有父节点指定函数结果列表
|
static <T> List<T> |
TreeUtil.getParentsId(MapTree<T> node,
boolean includeCurrentNode)
获取所有父节点ID列表
比如有个人在研发1部,他上面有研发部,接着上面有技术中心
返回结果就是:[研发部, 技术中心] |
static <T> List<CharSequence> |
TreeUtil.getParentsName(MapTree<T> node,
boolean includeCurrentNode)
获取所有父节点名称列表
比如有个人在研发1部,他上面有研发部,接着上面有技术中心
返回结果就是:[研发一部, 研发中心, 技术中心] |
MapTree<T> |
MapTree.setParent(MapTree<T> parent)
设置父节点
|
static <E> List<MapTree<E>> |
TreeUtil.toList(MapTree<E> root,
boolean broadFirst)
深度优先,遍历树,将树换为数组
|
Modifier and Type | Method and Description |
---|---|
TreeBuilder<E> |
TreeBuilder.append(Iterable<MapTree<E>> trees)
增加节点列表,增加的节点是不带子节点的
|
TreeBuilder<E> |
TreeBuilder.append(Iterator<MapTree<E>> iterator)
增加节点列表,增加的节点是不带子节点的
|
TreeBuilder<E> |
TreeBuilder.append(Map<E,MapTree<E>> map)
增加节点列表,增加的节点是不带子节点的
|
static <E> List<MapTree<E>> |
TreeUtil.build(Map<E,MapTree<E>> map,
E rootId)
树构建,按照权重排序
|
static <E> MapTree<E> |
TreeUtil.buildSingle(Map<E,MapTree<E>> map,
E rootId)
单点树构建,按照权重排序
它会生成一个以指定ID为ID的空的节点,然后逐级增加子节点。 |
MapTree<T> |
MapTree.filter(Predicate<MapTree<T>> predicate)
递归过滤当前树,注意此方法会修改当前树
通过 Predicate 指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点及其所有子节点,否则抛弃节点及其子节点 |
MapTree<T> |
MapTree.filterNew(Predicate<MapTree<T>> predicate)
递归过滤并生成新的树
通过 Predicate 指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点 |
static <T,E> List<E> |
TreeUtil.getParents(MapTree<T> node,
boolean includeCurrentNode,
Function<MapTree<T>,E> fieldFunc)
获取所有父节点指定函数结果列表
|
MapTree<T> |
MapTree.setChildren(List<MapTree<T>> children)
设置子节点,设置后会覆盖所有原有子节点
|
void |
MapTree.walk(Consumer<MapTree<T>> consumer)
递归树并处理子树下的节点,采用深度优先遍历方式。
|
void |
MapTree.walk(Consumer<MapTree<T>> consumer,
boolean broadFirst)
递归树并处理子树下的节点
|
Constructor and Description |
---|
TreeBuilder(MapTree<E> root)
构造
|
Modifier and Type | Method and Description |
---|---|
void |
NodeParser.parse(T object,
MapTree<E> treeNode) |
void |
DefaultNodeParser.parse(TreeNode<T> treeNode,
MapTree<T> tree) |
Copyright © 2025. All rights reserved.