private List<SysDirectory> buildDirectoriesTree(List<SysDirectory> directories) {
List<SysDirectory> returnList = new ArrayList<>();
directories = directories.stream().sorted(Comparator.comparing(SysDirectory::getLevel).reversed()).collect(Collectors.toList());
Map<String, List<SysDirectory>> directoryMap = new HashMap<>();
for (SysDirectory directory : directories) {
String parentId = String.valueOf(directory.getParentId());
directoryMap.computeIfAbsent(parentId, k -> new ArrayList<>()).add(directory);
Optional<List<SysDirectory>> children = Optional.ofNullable(directoryMap.get(directory.getDirectoryId()));
children.ifPresent(directory::setChildren);
if (directory.getLevel() == 1) {
returnList.add(directory);
}
}
return returnList;
}
@Data
public class SysDirectory extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 目标体系id
*/
private String directoryId;
/**
* 父节点id
*/
private Long parentId;
/**
* 祖级列表
*/
private String ancestors;
/**
* 目标体系名称
*/
private String directoryName;
/**
* 子集
*/
private List<SysDirectory> children = new ArrayList<SysDirectory>();
/**
* 层级
*/
private Integer level;
}