Package org.miaixz.bus.core.tree
Class BeanTree<T,R extends Comparable<R>>
java.lang.Object
org.miaixz.bus.core.tree.BeanTree<T,R>
- Type Parameters:
T- Bean类型R- 主键、外键类型
本类是用于构建树的工具类,特点是采取lambda,以及满足指定类型的Bean进行树操作 Bean需要满足三个属性:
- 包含不为null的主键(例如id)
- 包含容许为null的关联外键(例如parentId)
- 包含自身的子集,例如类型为List的children
BeanTree.of 进行构建,例如:
final BeanTree beanTree = BeanTree.of(JavaBean::getId, JavaBean::getParentId, null, JavaBean::getChildren,
JavaBean::setChildren);
得到的BeanTree实例可以调用toTree方法,将集合转换为树,例如:
final List<JavaBean> javaBeanTree = beanTree.toTree(originJavaBeanList);
也可以将已有的树转换为集合,例如:
final List<JavaBean> javaBeanList = beanTree.flat(originJavaBeanTree);
最后,引用一句电影经典台词: 无处安放的双手,以及无处安放的灵魂。《Hello!树先生》
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Method Summary
Modifier and TypeMethodDescriptionfilter(List<T> tree, PredicateX<T> condition) 树的过滤操作,本方法一般适用于寻找某人所在部门以及所有上级部门类似的逻辑 通过PredicateX指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点 即,一条路径上只要有一个节点符合条件,就保留整条路径上的节点将树扁平化为集合,相当于将树里的所有节点都放到一个集合里树节点遍历操作static <T,R extends Comparable<R>>
BeanTree<T, R> of(FunctionX<T, R> idGetter, FunctionX<T, R> pidGetter, R pidValue, FunctionX<T, List<T>> childrenGetter, BiConsumerX<T, List<T>> childrenSetter) 构建BeanTreestatic <T,R extends Comparable<R>>
BeanTree<T, R> ofMatch(FunctionX<T, R> idGetter, FunctionX<T, R> pidGetter, PredicateX<T> parentPredicate, FunctionX<T, List<T>> childrenGetter, BiConsumerX<T, List<T>> childrenSetter) 构建BeanTree将集合转换为树
-
Method Details
-
of
public static <T,R extends Comparable<R>> BeanTree<T,R> of(FunctionX<T, R> idGetter, FunctionX<T, R> pidGetter, R pidValue, FunctionX<T, List<T>> childrenGetter, BiConsumerX<T, List<T>> childrenSetter) 构建BeanTree- Type Parameters:
T- Bean类型R- 主键、外键类型- Parameters:
idGetter- 主键getter,例如JavaBean::getIdpidGetter- 外键getter,例如JavaBean::getParentIdpidValue- 根节点的外键值,例如nullchildrenGetter- 子集getter,例如JavaBean::getChildrenchildrenSetter- 子集setter,例如JavaBean::setChildren- Returns:
- BeanTree
-
ofMatch
public static <T,R extends Comparable<R>> BeanTree<T,R> ofMatch(FunctionX<T, R> idGetter, FunctionX<T, R> pidGetter, PredicateX<T> parentPredicate, FunctionX<T, List<T>> childrenGetter, BiConsumerX<T, List<T>> childrenSetter) 构建BeanTree- Type Parameters:
T- Bean类型R- 主键、外键类型- Parameters:
idGetter- 主键getter,例如JavaBean::getIdpidGetter- 外键getter,例如JavaBean::getParentIdparentPredicate- 根节点判断条件,例如o -> Objects.isNull(o.getParentId())childrenGetter- 子集getter,例如JavaBean::getChildrenchildrenSetter- 子集setter,例如JavaBean::setChildren- Returns:
- BeanTree
-
toTree
将集合转换为树- Parameters:
list- 集合- Returns:
- 转换后的树
-
flat
将树扁平化为集合,相当于将树里的所有节点都放到一个集合里本方法会主动将节点的子集合字段置为null
- Parameters:
tree- 树- Returns:
- 集合
-
filter
树的过滤操作,本方法一般适用于寻找某人所在部门以及所有上级部门类似的逻辑 通过PredicateX指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点 即,一条路径上只要有一个节点符合条件,就保留整条路径上的节点- Parameters:
tree- 树condition- 节点过滤规则函数,只需处理本级节点本身即可,PredicateX.test(Object)为true保留- Returns:
- 过滤后的树
-
forEach
树节点遍历操作- Parameters:
tree- 数action- 操作- Returns:
- 树
-