Java封装树形结构(任意父节点)
直接上代码,比如封装组织
树形结构:
@Servicepublic class TestService{ public List<DepTreeDto> treeDept() { //查询列表 List<DepTreeDto> deptList = deptMapper.listTreeDept(); return buildDeptTree(deptList); }/ * 构建前端所需要树结构 * * @param deptList 部门列表 * @return 树结构列表 */ private List<DepTreeDto> buildDeptTree(List<DepTreeDto> deptList) { //新集合 List<DepTreeDto> returnList = new ArrayList<>(); List<Integer> tempList = new ArrayList<>(); for (DepTreeDto dept : deptList) { tempList.add(dept.getId()); } for (DepTreeDto dept : deptList) { // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(dept.getParentId())) { recursionFn(deptList, dept); returnList.add(dept); } } //没有查询到节点则以当前节点 if (returnList.isEmpty()) { returnList = deptList; } return returnList; } / * 递归列表 */ private void recursionFn(List<DepTreeDto> list, DepTreeDto t) { // 得到子节点列表 List<DepTreeDto> childList = getChildList(list, t); t.setChildren(childList); for (DepTreeDto tChild : childList) { // 判断是否有子节点 if (StringUtils.isNotNull(tChild.getParentId()) && tChild.getParentId().equals(t.getId())) { for (DepTreeDto n : childList) { recursionFn(list, n); } } } } / * 得到子节点列表 */ private List<DepTreeDto> getChildList(List<DepTreeDto> list, DepTreeDto t) { List<DepTreeDto> tList = new ArrayList<>(); for (DepTreeDto n : list) { if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().equals(t.getId())) { tList.add(n); } } return tList; }}