应用场景1:行政区划的树形结构
//实体类
public class Area implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String code;
private String area;
private String parent;
private String point;
private Integer level;
public AreaVO toVO() {
AreaVO areaVO = new AreaVO();
BeanUtils.copyProperties(this, areaVO);
return areaVO;
}
//api
public Result getList( Integer level) {
List<AreaVO> dataList = this.iAreaService.lambdaQuery()
.le(Strings.isNotBlank(String.valueOf(level)),Area::getLevel, level)
.list()
.stream()
.map(Area::toVO)
.collect(Collectors.toList());
Map<String, List<AreaVO>> collect = dataList.stream()
.filter(Objects::nonNull)
.filter(o -> StringUtils.isNotBlank(o.getParent()))
.collect(Collectors.groupingBy(AreaVO::getParent));
for (AreaVO data : dataList) {
String code = data.getCode();
List<AreaVO> list = collect.get(code);
data.setChildren(list);
}
dataList = dataList.stream()
.filter(e -> StringUtils.isBlank(e.getParent()))
.collect(Collectors.toList());
return Result.ok(dataList);
}