在日常开发中,经常会遇到返回树形及遍历树形结构的需求,比如构建菜单,项目-任务树形结构,角色权限树形结构等。数据库一般使用parent_id来表示上一层级,遍历的时候一般使用递归或多层for循环,增加了数据库的查询压力。
为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理。
话不多说,直接上Demo。
首先,创建一个Menu 菜单的实体类
@Data
@Builder
public class Menu {
/**
* 唯一id
*/
public Integer id;
/**
* 菜单名称
*/
public String name;
/**
* 上级id ,根节点为0
*/
public Integer parentId;
/**
* 子节点信息
*/
public List<Menu> childList;
public Menu(Integer id, String name, Integer parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
}
public Menu(Integer id, String name, Integer parentId, List<Menu> childList) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.childList = childList;
}
}
接下来,模拟生成一颗树形结构List