实体类
@Data
public class AreaclTreeVO implements Serializable {
private String code;
private String name;
private Integer type;
private List<AreaclTreeVO> children;
private String pkAreacl;
private String pkFatherarea;
}
List生成树结构
private List<AreaclTreeVO> createAreaTree(){
Map<String, AreaclTreeVO> map = new HashMap<>();
List<AreaclTreeVO> areaclVOList = areaclMapper.selectAreaTree();
if(CollectionUtils.isEmpty(areaclVOList)){
return map;
}
map = areaclVOList.stream()
.collect(Collectors.toMap(AreaclTreeVO::getPkAreacl, areaclTreeVO -> areaclTreeVO));
for (AreaclTreeVO areaclTreeVO : areaclVOList) {
AreaclTreeVO parent = map.get(areaclTreeVO.getPkFatherarea());
if(!Objects.isNull(parent)){
if(Objects.isNull(parent.getChildren())){
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(areaclTreeVO);
}
}
List<AreaclTreeVO> result = map.values().stream()
.filter(areaclTreeVO -> AreaclTypeEnum.REGION.getCode().equals(areaclTreeVO.getType()))
.collect(Collectors.toList());
return result;
}
广度优先遍历树结构
private List<AreaclTreeVO> breadthFirst(AreaclTreeVO areaclTreeVO) {
List<AreaclTreeVO> resultList = new ArrayList<>();
if(Objects.isNull(areaclTreeVO)){
return resultList;
}
Queue<AreaclTreeVO> queue = new LinkedList<>();
queue.offer(areaclTreeVO);
while (!queue.isEmpty()) {
areaclTreeVO = queue.poll();
List<AreaclTreeVO> children = new ArrayList<>();
if(!Objects.isNull(areaclTreeVO)){
children = areaclTreeVO.getChildren();
}
if (!CollectionUtils.isEmpty(children)) {
for (AreaclTreeVO child : children) {
queue.offer(child);
}
}
resultList.add(areaclTreeVO);
}
return resultList;
}