实体
public class DeptTreeDto {
/**
* id 主键
*/
private Integer id;
/**
* 父id
*/
private Integer pId;
/**
* 名称
*/
private String name;
/**
* 类型 0 组织 1 用户
*/
private Integer type;
/**
* 子类
*/
@ApiModelProperty(name = "children",value = "子类")
private List<DeptTreeDto> children;
//忽略 getter,setter
。。。。。。。
}
业务逻辑
List<DeptTreeDto> dtoList = this.orgInfoMapper.listAll();
Map<Integer, DeptTreeDto> dtoMap = dtoList.stream().collect(Collectors.toMap(DeptTreeDto::getId, v -> v));
// OrgConstants.TYPE_DEPT=0 代表 部门
dtoList.forEach(dept -> dept.setType(OrgConstants.TYPE_DEPT));
//查询全部人员
List<DeptTreeDto> listUser = orgInfoMapper.listUser();
// OrgConstants.TYPE_DEPT=1 代表 用户
listUser.forEach(user -> user.setType(OrgConstants.TYPE_USER));
//获取部门id
List<Integer> deptIds = dtoList.stream().map(DeptTreeDto::getId).collect(Collectors.toList());
dtoList.addAll(listUser);
Integer pId;
DeptTreeDto parentTreeNode;
ArrayList<DeptTreeDto> tree = new ArrayList<>();
for (DeptTreeDto temp : dtoList) {
pId = temp.getPId();
if (!deptIds.contains(pId)) {
//顶级
tree.add(temp);
} else {
parentTreeNode = dtoMap.get(pId);
if (parentTreeNode.getChildren() == null) {
parentTreeNode.setChildren(new ArrayList<>());
}
parentTreeNode.getChildren().add(temp);
}
}
return tree;
}