Java实现树结构以并计算各个节点数的和
·
1. 接收DTO
@Data
public class DeptDTO {
private Long id;
private String name;
private Long parentId;
private Integer nums;
}
2. 树对象Tree
@Data
public class DeptTree {
private Long id;
private String name;
private Integer nums;
private List<DeptTree> childList;
}
3. 构建树和节点数
public static List<DeptTree> buildTree(List<DeptDTO> deptList) {
List<DeptTree> result = new ArrayList<>();
for (DeptDTO dept : deptList) {
if (dept.getParentId().equals(0L)) {
result.add(recursiveChild(dept, deptList));
}
}
return result;
}
public static DeptTree recursiveChild(DeptDTO dept, List<DeptDTO> deptList) {
DeptTree deptTree = new DeptTree();
deptTree.setId(dept.getId());
deptTree.setName(dept.getName());
deptTree.setNums(0);
for (DeptDTO son : deptList) {
if (deptTree.getId().equals(son.getParentId())) {
if (deptTree.getChildList() == null) {
deptTree.setChildList(new ArrayList<>());
}
deptTree.getChildList().add(recursiveChild(son, deptList));
}
}
if (deptTree.getChildList() != null) {
deptTree.setNums(getChildNumsTotal(deptTree.getChildList()) + dept.getNums());
} else {
deptTree.setNums(dept.getNums());
}
return deptTree;
}
//计算节点数
public static int getChildNumsTotal(List<DeptTree> childList) {
int childNumsTotal = 0;
for (DeptTree deptTree : childList) {
childNumsTotal += deptTree.getNums();
}
return childNumsTotal;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)