构建树状列表
1.定义组装树的DTO,比如:BookTreeDTO,基本属性值包括:id,name,parentId,List<BookTreeDTO> children
。
2.根据自己的业务逻辑,查询出所有符合条件的数据:List<BookTreeDTO> allBookDataList = xxxxMapper.getAllData();
3.利用stream流遍历组装树状列表:
public List<BookTreeDTO> getBookTree(List<BookTreeDTO> allBookDataList ) {
//获取父节点
List<BookTreeDTO> collect = allBookDataList .stream().filter(t -> t.getParentId().equals("#/A")).map(
m -> {
m.setChildren(getChildren(m, allBookDataList ));
return m;
}
).collect(Collectors.toList());
return collect;
}
/**
* 递归查询子节点
* @param root 根节点
* @param all 所有节点
* @return 根节点信息
*/
public List<BookTreeDTO> getChildren(BookTreeDTO root, List<BookTreeDTO> all) {
List<BookTreeDTO> children = all.stream().filter(t -> {
return Objects.equals(t.getParentId(), root.getId());
}).map(
m -> {
m.setChildren(getChildren(m, all));
return m;
}
).collect(Collectors.toList());
return children;
}
4.以上返回的就是构造好的树状列表。
总结:以上方法,构造树状列表,方便快捷,且不受树层级的限制,很好用呦。