表结构
目录级的parent_id为0
代码
@Override
public List<SysMenu> selectRouterTreeByUserId(Long userId)
{
List<SysMenu> menus = null;
menus = SysRouterMapper.selectRouterTreeByUserId(userId);
return getChildPerms(menus, 0);
}
public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
{
for(Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();){
SysMenu t = (SysMenu) iterator.next();
if(t.getParentId() == parentId){
// 通过递归获取父节点的所有子节点
recursionFn(list, t);
}
}
return list;
}
public void recursionFn(List<SysMenu> list, SysMenu t)
{
// 获取子节点
List<SysMenu> childList = getChildList(list, t);
t.setChildren(childList);
// 判断子节点是否还有子节点,有则继续递归
for(Iterator<SysMenu> iterator = childList.iterator(); iterator.hasNext();){
SysMenu tChild = (SysMenu) iterator.next();
if(hasChild(list, tChild)){
recursionFn(list, tChild);
}
}
}
private boolean hasChild(List<SysMenu> list, SysMenu tChild) {
return getChildList(list, tChild).size() > 0;
}
public List<SysMenu> getChildList (List<SysMenu> list, SysMenu t){
List<SysMenu> childList = new ArrayList<SysMenu>();
for(Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();){
SysMenu node = (SysMenu) iterator.next();
if(node.getParentId().longValue() == t.getMenuId().longValue()){
childList.add(node);
}
}
return childList;
}