1.实体类
1.有本实体类集合 =>childers();
参数说明:参数一: depts(符合条件的所有集合)
public List<SysDept> buildDeptTree(List<SysDept> depts)
{
//存放新数据
List<SysDept> returnList = new ArrayList<SysDept>();
//存放部门编号结合
List<Long> tempList = new ArrayList<Long>();
for (SysDept dept : depts)
{
tempList.add(dept.getDeptId());
}
for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext();)
{
SysDept dept = (SysDept) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(dept.getParentId()))
{
//
recursionFn(depts, dept);
returnList.add(dept);
}
}
//如果为空,将原数据丢给
if (returnList.isEmpty())
{
returnList = depts;
}
return returnList;
}
(2)递归列表
private void recursionFn(List<SysDept> list, SysDept t)
{
// 得到子节点列表
List<SysDept> childList = getChildList(list, t);
t.setChildren(childList);
for (SysDept tChild : childList)
{
if (hasChild(list, tChild))
{
// 判断是否有子节点
Iterator<SysDept> it = childList.iterator();
while (it.hasNext())
{
SysDept n = (SysDept) it.next();
recursionFn(list, n);
}
}
}
}
(3)得到子节点列表:
/**
* 得到子节点列表
*/
private List<SysDept> getChildList(List<SysDept> list, SysDept t)
{
List<SysDept> tlist = new ArrayList<SysDept>();
Iterator<SysDept> it = list.iterator();
while (it.hasNext())
{
SysDept n = (SysDept) it.next();
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
{
tlist.add(n);
}
}
return tlist;
}
(4)判断是否有子节点
/**
* 判断是否有子节点
*/
private boolean hasChild(List<SysDept> list, SysDept t)
{
return getChildList(list, t).size() > 0 ? true : false;
}
结果:
前端用elementui写的。
读取别人的源码,感觉别人的写的不错,就贡献出来了,作者大大看到不要找我哈。