zoukankan      html  css  js  c++  java
  • Stream流之三级查询

    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);
        }
    }
    
    以粮为纲全面发展
  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/alexliuf/p/14034234.html
Copyright © 2011-2022 走看看