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);
    }
}

 

posted on 2020-11-25 09:55  AlexLiuF  阅读(300)  评论(0编辑  收藏  举报