Java8新特性Stream 您所在的位置:网站首页 java递归list Java8新特性Stream

Java8新特性Stream

2024-07-14 02:36| 来源: 网络整理| 查看: 265

日常开发中会碰需要树形结构数据,层级菜单显示,或者是根据指定id删除该id和其包含的所有子节点,下面简单分享一下,如有错误,还请大佬指点

菜单实体类 /** *

菜单实体类

* @author : Zyy * @date : 2020-12-26 17:41 **/ @Data //lombok注解,自动生成set和get方法 public class Menu { //id private String id; //菜单名 private String name; //父节点id private String pid; //子节点信息 private List children; //无参构造 public Menu() {} //带参构造 public Menu(String id, String name, String pid) { this.id = id; this.name = name; this.pid= pid; } } 递归遍历树形结构 public void getTreeMenu() { //模拟数据库查出所有数据 List menus = Arrays.asList( new Menu(1, "根节点", 0), new Menu(2, "子节点1", 1), new Menu(3, "子子节点1.1", 2), new Menu(6, "子子子节点1.1.1", 3), new Menu(4, "子节点2", 1), new Menu(5, "子子节点2.1", 4) ); //筛选出根节点 List list = menus.stream().filter(menu -> "0".equals(menu.getPid())).peek( //设置子节点信息 menu -> menu.setChildren(getChildrens(menu, menus)) ).collect(Collectors.toList()); } private List getChildrens(Menu root, List menus) { List list = menus.stream().filter(menu -> //筛选出下一节点元素 Objects.equals(menu.getPid(), root.getId())).map(menu -> { //递归set子节点 menu.setChildren(this.getChildrens(menu, menus)); return menu; }).collect(Collectors.toList()); return list; } 递归删除节点及其子节点(结合MybatisPlus框架) public void deleteMenus(String id) { //存储所有要删除的id List idList = new ArrayList(); //获得所有需要删除的id this.selectChildListById(id, idList); //添加删除的节点id idList.add(id); //MybatisPlus批量删除方法 baseMapper.deleteBatchIds(idList); } private String selectChildListById(String id, List idList) { //查询数据库pid等于id的数据 List childList = baseMapper.selectList(new QueryWrapper().eq("pid", id).select("id")); //递归查询下一级id,同时将上一次查询结果添加到list集合 childList.forEach(menu-> { idList.add(menu.getId()); this.selectChildListById(menu.getId(), idList); }); }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有