java 返回树形结构
java 返回树形结构,此代码是搬运若依系统的。
·
//depts:需要组装树的所有数据
@Override
public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts)
{
List<SysDept> deptTrees = buildDeptTree(depts);
return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
@Override
public List<SysDept> buildDeptTree(List<SysDept> depts) {
List<SysDept> returnList = new ArrayList<>();
List<Long> tempList = new ArrayList<>();
for (SysDept dept : depts) {
tempList.add(dept.getDeptId());//获取所有数据的id
}
for (SysDept dept : depts) {
// 把最高层级的部门节点取出来 dept.getParentId()都是父节点,而唯独最高节点的父节点不在所有的数据id中
if (!tempList.contains(dept.getParentId())) {
recursionFn(depts, dept);
returnList.add(dept);//将组装好的数据放入最终返回结果集合中
}
}
if (returnList.isEmpty()) {
returnList = depts;
}
return returnList;
}
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)) {//当前对象中有子数据
recursionFn(list, tChild);//继续构建下面的子节点
}
}
}
/**
* 判断是否有子节点
*/
private boolean hasChild(List<SysDept> list, SysDept t) {
return getChildList(list, t).size() > 0 ? true : false;
}
/**
* 得到子节点列表
*/
private List<SysDept> getChildList(List<SysDept> list, SysDept t) {
List<SysDept> tlist = new ArrayList<>();
Iterator<SysDept> it = list.iterator();
while (it.hasNext()) {
SysDept n = (SysDept) it.next();
//如果下个数据的父级id等于当前传过来数据的id,那么就是当前数据下的子节点
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) {
tlist.add(n);
}
}
return tlist;
}
此代码是搬运若依系统的
2、另一种方式
//创建一个方法调用
List<Department> departmentVOList = makeDepartmentTree(departmentList, 0L);
public List<Department> makeDepartmentTree(List<Department> departmentList,Long pid) {
List<Department> objects = new ArrayList<>();//返回最终组织的结果树
if (CollectionUtils.isEmpty(departmentList)){
return objects;
}
for (Department department : departmentList) {
if (department.getPid() != null && department.getPid() == pid){//首先传输进来的是顶级节点的pid,所以先判断哪些部门是顶级部门
//走到这说明找到了下级节点,所以再循环找出下级节点的下级节点,以此类推
List<Department> departmentVOList = makeDepartmentTree(departmentList, department.getId());
department.setChildren(departmentVOList);//最后每层找完以后分次弹出数据,然后将数据设置到子节点的集合中
objects.add(department);
}
}
return objects;
}
更多推荐
已为社区贡献1条内容
所有评论(0)