递归找孩子
层级菜单
公共基础类
/**
* 公共父类
* @author Administrator
*/
@Data
public class BaseObject {
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
}
实体类定义
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class T extends BaseObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 名称
*/
private String name;
/**
* 所属上上级id
*/
private String rootId;
//0一级目录 二级目录 三级目录
/**
* 下级
* 不用在手写一个Vo封装个前端使用
*/
@TableField(exist = false)
private List<T> children;
}
创建的方法
/**
* 使用递归方法建菜单 一级菜单
* @param treeNodes
* @return
*/
private static List<T> bulid(List<T> treeNodes) {
List<T> trees = new ArrayList<>();
for (T treeNode : treeNodes) {
if ("0".equals(treeNode.getPid())) {
//父级节点level为1
treeNode.setLevel(1);
//获取子节点
trees.add(findChildren(treeNode,treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
private static T findChildren(T treeNode,List<T> treeNodes) {
treeNode.setChildren(new ArrayList<T>());
for (T it : treeNodes) {
if(treeNode.getId().equals(it.getPid())) {
//每一次方法调用level+1
int level = treeNode.getLevel() + 1;
it.setLevel(level);
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
//获取子节点
treeNode.getChildren().add(findChildren(it,treeNodes));
}
}
return treeNode;
}
T是泛型,方法体中根据所需增删字段,修改实体类的名称