Test
/** * 三级数据封装 例如:三级分类 三级菜单 * .map()是循环 * 此代码固定套路 固定写法 */ @Test public void test4(){ /** * 查询到所有的菜单数据 * 包含一级二级三级 * * 任务是:获取其中的一级菜单数据 */ List<BzMenu> menus = menuService.list(); /** * 1 获取所有的一级数据 */ List<BzMenu> level1 = menus.stream() .filter(bzMenu -> { return bzMenu.getType() == 0; }) // 到此处当前集合中 只有一级对象 可以在一级的所有对象中 封装二级数据 给集合属性赋值 // map 可以将集合中的对象 改变为另一种类型 例如 BzMenu --》String // 也可以给集合中的对象 赋值 .map(bzMenu -> { /** * 封装二级菜单的数据 * * 所有数据 menus * getLevelMenuList 根据一级的id 从所有数据中查询到二级菜单 */ bzMenu.setMenuList(getLevelMenuList(bzMenu.getMenuId(),menus)); return bzMenu; }) .collect(Collectors.toList()); System.out.println(level1); } /** * 根据一级招二级 * * 思考题:包装类比较能不能用 == */ private List<BzMenu> getLevelMenuList(Long menuId, List<BzMenu> menus) { List<BzMenu> collect = menus.stream() .filter(bzMenu -> { return bzMenu.getParentId().equals(menuId); }) // 二级封装三级 .map(bzMenu -> { bzMenu.setMenuList(getLevelMenuList(bzMenu.getMenuId(),menus)); return bzMenu; }) .collect(Collectors.toList()); return collect; }
实体类
package com.baizhi.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * 菜单管理 * </p> * * @author lby * @since 2020-11-24 */ @Data @EqualsAndHashCode(callSuper = false) public class BzMenu implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "menu_id", type = IdType.AUTO) private Long menuId; /** * 父菜单ID,一级菜单为0 */ private Long parentId; /** * 菜单名称 */ private String name; /** * 菜单URL */ private String url; /** * 授权(多个用逗号分隔,如:user:list,user:create) */ private String perms; /** * 类型 0:目录 1:菜单 2:按钮 */ private Integer type; /** * 菜单图标 */ private String icon; /** * 排序 */ private Integer orderNum; }
/** * for循环实现 */ @Test public void test2(){ /** * 查询到所有的菜单数据 * 包含一级二级三级 * * 任务是:获取其中的一级菜单数据 */ List<BzMenu> menus = menuService.list(); List<BzMenu> newMenus = new ArrayList<>(); for (BzMenu menu : menus) { if (menu.getType() == 0) { newMenus.add(menu); } } System.out.println(newMenus); /** * 流的操作 */ List<BzMenu> collect = menus.stream().filter(bzMenu -> bzMenu.getType() == 0).collect(Collectors.toList()); } /** * */ @Test public void test3(){ /** * 查询到所有的菜单数据 * 包含一级二级三级 * * 任务是:获取其中的一级菜单数据 */ List<BzMenu> menus = menuService.list(); /** * 1 获取一个流 stream() */ Stream<BzMenu> stream = menus.stream(); /** * 2 处理这个流 增加过滤操作 * * filter 返回值为true 代表当前元素保留 * 返回值为false 代表不保留 */ stream = stream.filter(bzMenu -> bzMenu.getType() == 0); /** * 3 收集流中的数据 */ List<BzMenu> newMenus = stream.collect(Collectors.toList()); for (BzMenu menu : newMenus) { System.out.println(menu); } }