private List<CompanyFrameTreeRespVO> buildTree(List<CompanyFrame> list) {
// 1. 构建节点 Map
Map<Long, CompanyFrameTreeRespVO> treeMap = list.stream()
.map(this::convertToTreeVO)
.collect(Collectors.toMap(CompanyFrameTreeRespVO::getId, node -> node));
// 2. 构建树结构
treeMap.values().stream()
.filter(node -> node.getParentId() != null && !node.getParentId().equals(CompanyFrame.PARENT_ID_ROOT))
.forEach(node -> Optional.ofNullable(treeMap.get(node.getParentId()))
.ifPresent(parent -> parent.getChildren().add(node)));
// 3. 对子节点排序
treeMap.values().stream()
.filter(node -> !node.getChildren().isEmpty())
.forEach(node -> node.getChildren().sort(Comparator.comparing(CompanyFrameTreeRespVO::getSort)));
// 4. 获取根节点
List<CompanyFrameTreeRespVO> rootList = treeMap.values().stream()
.filter(node -> node.getParentId() == null
|| node.getParentId().equals(DeptDO.PARENT_ID_ROOT))
.collect(Collectors.toList());
return rootList;
}
private CompanyFrameTreeRespVO convertToTreeVO(CompanyFrame companyFrame) {
CompanyFrameTreeRespVO node = BeanUtils.toBean(companyFrame, CompanyFrameTreeRespVO.class);
node.setChildren(new ArrayList<>());
return node;
}