/*
查子节点
*/
// 装子节点集合
static List<TbUserDepartmentDic> childMenu=new ArrayList<TbUserDepartmentDic>();
/**
递归查询全部的子节点,子节点下也有子节点额
menuList 全部的集合
pid 是自己的id,不是我父级id和下面那个相反 返回的集合就是自己全部的下级的id集合
*/
public static List<TbUserDepartmentDic> treeMenuList( List<TbUserDepartmentDic> menuList, long pid){
for(TbUserDepartmentDic mu: menuList){
//mu.getParentDepartmentId()是我的父级id
//遍历出父id等于参数的id,add进子节点集合
if(mu.getParentDepartmentId()==pid){
//递归遍历下一级
//mu.getDepartmentId()是我自己的id
treeMenuList(menuList,mu.getDepartmentId());
childMenu.add(mu);
}
}
return childMenu;
}
/*
查询我这条数的所有父节点集合
*/
private static Set<String> childMenu=new HashSet<>();
/*
menuList 总数据--集合
pid 我这条数数据的-父级id,注意是我的父级id 不是我自己的主键id
*/
public static Set<String> treeMenuList( List<TDepartment> menuList, String pid){
for(TDepartment mu: menuList){
//mu.getId()是我自己的id
if(mu.getId().equals(pid)){
childMenu.add(mu.getId());
//mu.getParentId()是我父级的id
treeMenuList(menuList,mu.getParentId());
}
}
return childMenu;
}
-----------------------------
jdk8获取子节点
@Data
@Builder
public class Menu {
/**
* id
*/
public Integer id;
/**
* 名称
*/
public String name;
/**
* 父id ,根节点为0
*/
public Integer parentId;
/**
* 子节点信息
*/
public List<Menu> childList;
}
/**
* 递归查询子节点
* @param root 根节点
* @param all 所有节点
* @return 根节点信息
*/
private List<Menu> getChildrens(Menu root, List<Menu> all) {
List<Menu> children = all.stream().filter(m -> {
return Objects.equals(m.getParentId(), root.getId());
}).map(
(m) -> {
m.setChildList(getChildrens(m, all));
return m;
}
).collect(Collectors.toList());
return children;
}