T
- Bean类型R
- 主键、外键类型public class BeanTree<T,R extends Comparable<R>> extends Object
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!树先生》
Modifier and Type | Method and Description |
---|---|
List<T> |
filter(List<T> tree,
SerPredicate<T> condition)
树的过滤操作,本方法一般适用于寻找某人所在部门以及所有上级部门类似的逻辑
通过
SerPredicate 指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点即,一条路径上只要有一个节点符合条件,就保留整条路径上的节点 |
List<T> |
flat(List<T> tree)
将树扁平化为集合,相当于将树里的所有节点都放到一个集合里
本方法会主动将节点的子集合字段置为null
|
List<T> |
forEach(List<T> tree,
SerConsumer<T> action)
树节点遍历操作
|
static <T,R extends Comparable<R>> |
of(SerFunction<T,R> idGetter,
SerFunction<T,R> pidGetter,
R pidValue,
SerFunction<T,List<T>> childrenGetter,
SerBiConsumer<T,List<T>> childrenSetter)
构建BeanTree
|
static <T,R extends Comparable<R>> |
ofMatch(SerFunction<T,R> idGetter,
SerFunction<T,R> pidGetter,
SerPredicate<T> parentPredicate,
SerFunction<T,List<T>> childrenGetter,
SerBiConsumer<T,List<T>> childrenSetter)
构建BeanTree
|
List<T> |
toTree(List<T> list)
将集合转换为树
|
public static <T,R extends Comparable<R>> BeanTree<T,R> of(SerFunction<T,R> idGetter, SerFunction<T,R> pidGetter, R pidValue, SerFunction<T,List<T>> childrenGetter, SerBiConsumer<T,List<T>> childrenSetter)
T
- Bean类型R
- 主键、外键类型idGetter
- 主键getter,例如 JavaBean::getId
pidGetter
- 外键getter,例如 JavaBean::getParentId
pidValue
- 根节点的外键值,例如 null
childrenGetter
- 子集getter,例如 JavaBean::getChildren
childrenSetter
- 子集setter,例如 JavaBean::setChildren
public static <T,R extends Comparable<R>> BeanTree<T,R> ofMatch(SerFunction<T,R> idGetter, SerFunction<T,R> pidGetter, SerPredicate<T> parentPredicate, SerFunction<T,List<T>> childrenGetter, SerBiConsumer<T,List<T>> childrenSetter)
T
- Bean类型R
- 主键、外键类型idGetter
- 主键getter,例如 JavaBean::getId
pidGetter
- 外键getter,例如 JavaBean::getParentId
parentPredicate
- 根节点判断条件,例如 o -> Objects.isNull(o.getParentId())
childrenGetter
- 子集getter,例如 JavaBean::getChildren
childrenSetter
- 子集setter,例如 JavaBean::setChildren
public List<T> flat(List<T> tree)
本方法会主动将节点的子集合字段置为null
tree
- 树public List<T> filter(List<T> tree, SerPredicate<T> condition)
SerPredicate
指定的过滤规则,本节点或子节点满足过滤条件,则保留当前节点,否则抛弃节点及其子节点tree
- 树condition
- 节点过滤规则函数,只需处理本级节点本身即可,SerPredicate.test(Object)
为true
保留Copyright © 2025. All rights reserved.