一.应用场景
有时候需要我们后台给前台传树结构的数据,要怎么查询? 怎么返回数据呢?
二.数据库表设计以及数据内容(以部门举例)
id 主键
parent_id 父级部门id
depart_name 部门名词
sort 部门排序
三.实体类
@Data
public class KunKun implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("部门id")
private String id;
@ApiModelProperty("父级部门id")
private String parentId;
@ApiModelProperty("机构/部门名称")
private String departName;
@ApiModelProperty("子级部门的集合")
private List<KunKun> children;
}
四.代码实现
public void selectKunTree() {
//查询部门信息,获取全部部门信息
List<KunKun> kunList = xxxxMapper.selectList() ;
//组装成树形结构
//找到所有的一级分类(也就是树的根节点)
List<KunKun> ikuns = kunList.stream().filter(ikun ->
ikun.getParentId() == 0
).map((menu) -> {
menu.setChildren(getChildrens(menu,kunList));
return menu;
}).sorted((menu1,menu2)-> {//如果你查询的时候就排好序了就不用写这里
return menu1.getSort() - menu2.getSort();
}).collect(Collectors.tolist());
//返回树结构的list
return ikuns;
}
//递归方法
private List<KunKun> getChildrens(KunKun root,List<KunKun> all){
List<KunKun> children = all.stream().filter(ikun -> {
return ikun.getParentId() == root.getId();
}).map(ikun -> { //找子部门
ikun.setChildren(getChildrens(ikun ,all));
return categoryEntity;
}).sorted( (menu1 ,menu2)
return menu1.getSort - menu2.getSort()
}).collect(Collectors .tolist());
return children;
}