/**
* 构建前端所需要树结构
*
* @param menus 菜单列表
* @return 树结构列表
*/
public List<BOMBaseDict> buildMenuTree(List<BOMBaseDict> menus)
{
List<BOMBaseDict> returnList = new ArrayList<BOMBaseDict>();
List<Integer> tempList = new ArrayList<Integer>();
for (BOMBaseDict dept : menus)
{
tempList.add(dept.getDictId());
}
for (Iterator<BOMBaseDict> iterator = menus.iterator(); iterator.hasNext();)
{
BOMBaseDict menu = (BOMBaseDict) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentCode()))
{
recursionFn(menus, menu);
/*if (null == menu.getChildren() || menu.getChildren().size() ==0){
continue;
}*/
returnList.add(menu);
}
}
if (returnList.isEmpty())
{
returnList = menus;
}
return returnList;
}
/**
* 得到子节点列表
*/
private List<BOMBaseDict> getChildList(List<BOMBaseDict> list, BOMBaseDict t)
{
List<BOMBaseDict> tlist = new ArrayList<BOMBaseDict>();
Iterator<BOMBaseDict> it = list.iterator();
while (it.hasNext())
{
BOMBaseDict n = (BOMBaseDict) it.next();
if (n.getParentCode().equals( t.getDictId().toString()))
{
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<BOMBaseDict> list, BOMBaseDict t)
{
return getChildList(list, t).size() > 0;
}
/**
* 递归列表
*
* @param list
* @param t
*/
private void recursionFn(List<BOMBaseDict> list, BOMBaseDict t)
{
// 得到子节点列表
List<BOMBaseDict> childList = getChildList(list, t);
t.setChildren(childList);
for (BOMBaseDict tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
/**
* 根据父节点的ID获取所有子节点
*
* @param list 分类表
* @param parentId 传入的父节点ID
* @return String
*/
public List<BOMBaseDict> getChildPerms(List<BOMBaseDict> list, String parentId)
{
List<BOMBaseDict> returnList = new ArrayList<BOMBaseDict>();
for (Iterator<BOMBaseDict> iterator = list.iterator(); iterator.hasNext();)
{
BOMBaseDict t = (BOMBaseDict) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentCode() == parentId)
{
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
调用
List<BOMBaseDict> menuTrees = buildMenuTree(list);