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);
        }
    }
    
    以粮为纲全面发展
  • 相关阅读:
    UVA
    Codeforces 898F 字符串hash
    牛客练习赛11 B trie树+拓扑判环 E 分治求平面最近点对
    Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
    2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) D bfs思维 E bfs I Floyd找最小环 K 二分
    Educational Codeforces Round 37 E 补图求连通块 bfs+链表优化 F 线段树套路
    Codeforces 919E 数论,思维
    大数加法(主要是想记住模板)
    基础图论3
    简单并查集2hdu1213
  • 原文地址:https://www.cnblogs.com/alexliuf/p/14034234.html
Copyright © 2011-2022 走看看