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);
}
}
以粮为纲全面发展
浙公网安备 33010602011771号