网站后台怎么修改密码,雅客网站建设,一般做企业网站需要什么资料,网络营销企业培训可能平常会遇到一些需求#xff0c;比如构建菜单#xff0c;构建树形结构#xff0c;数据库一般就使用父id来表示#xff0c;为了降低数据库的查询压力#xff0c;我们可以使用Java8中的Stream流一次性把数据查出来#xff0c;然后通过流式处理#xff0c;我们一起来看看…可能平常会遇到一些需求比如构建菜单构建树形结构数据库一般就使用父id来表示为了降低数据库的查询压力我们可以使用Java8中的Stream流一次性把数据查出来然后通过流式处理我们一起来看看代码实现为了实现简单就模拟查看数据库所有数据到List里面。
实体类Menu.java
/** * Menu * * author lcry * date 2020/06/01 20:36 */ Data Builder public class Menu { /** * id */ public Integer id; /** * 名称 */ public String name; /** * 父id 根节点为0 */ public Integer parentId; /** * 子节点信息 */ public ListMenu 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, ListMenu childList) { this.id id; this.name name; this.parentId parentId; this.childList childList; } } 递归组装树形结构 Test public void testtree(){ //模拟从数据库查询出来 ListMenu menus Arrays.asList( new Menu(1,根节点,0), new Menu(2,子节点1,1), new Menu(3,子节点1.1,2), new Menu(4,子节点1.2,2), new Menu(5,根节点1.3,2), new Menu(6,根节点2,1), new Menu(7,根节点2.1,6), new Menu(8,根节点2.2,6), new Menu(9,根节点2.2.1,7), new Menu(10,根节点2.2.2,7), new Menu(11,根节点3,1), new Menu(12,根节点3.1,11) ); //获取父节点 ListMenu collect menus.stream().filter(m - m.getParentId() 0).map( (m) - { m.setChildList(getChildrens(m, menus)); return m; } ).collect(Collectors.toList()); System.out.println(-------转json输出结果-------); System.out.println(JSON.toJSON(collect)); } /** * 递归查询子节点 * param root 根节点 * param all 所有节点 * return 根节点信息 */ private ListMenu getChildrens(Menu root, ListMenu all) { ListMenu children all.stream().filter(m - { return Objects.equals(m.getParentId(), root.getId()); }).map( (m) - { m.setChildList(getChildrens(m, all)); return m; } ).collect(Collectors.toList()); return children; }