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;
}

猜你喜欢

转载自blog.csdn.net/qq_49641620/article/details/133237774