首页 > 其他分享 >两个循环搞定多级菜单列表递归成tree

两个循环搞定多级菜单列表递归成tree

时间:2023-04-14 18:59:39浏览次数:39  
标签:map 搞定 菜单 String menu tree menus split Menu

菜单类

public static class Menu {
        Menu(String data) {
            String[] split = data.split(" ");
            this.id = Integer.valueOf(split[0]);
            this.name = split[1];
            this.pid = Integer.valueOf(split[2]);
        }
        Integer id;
        String name;
        Integer pid;
        List<Menu> children;
}

 

菜单数据

static String MENUS = "1 node1 0 ," +
            "2 node2 0 ," +
            "3 node3 0 ," +
            "4 node4 1 ," +
            "5 node5 1 ," +
            "6 node6 1 ," +
            "7 node7 2 ," +
            "8 node8 2 ," +
            "9 node9 3 ," +
            "10 node10 4 ," +
            "11 node11 4 ," +
            "12 node12 4 ," +
            "13 node13 5 ," +
            "14 node14 5 ," +
            "15 node15 6 ," +
            "16 node16 7 ," +
            "17 node17 7 ," +
            "18 node18 7 ," +
            "19 node19 8 ," +
            "20 node20 8 ," +
            "21 node21 9 ," +
            "22 node22 10 ," +
            "23 node23 10 ," +
            "24 node24 10 ," +
            "25 node25 11 ," +
            "26 node26 11 ," +
            "27 node27 12 ," +
            "28 node28 13 ," +
            "29 node29 13 ," +
            "30 node30 13 ," +
            "31 node31 14 ," +
            "32 node32 14 ," +
            "33 node33 15 ," +
            "34 node34 16 ," +
            "35 node35 16 ," +
            "36 node36 16 ," +
            "37 node37 17 ," +
            "38 node38 17 ," +
            "39 node39 18 ," +
            "40 node40 19 ," +
            "41 node41 19";

 

    public static List<Menu> getMenus(String s) {
        String[] split = s.split(" ,");
        List<Menu> menus = new ArrayList<>();
        for (String s1 : split) {
            menus.add(new Menu(s1));
        }
        return menus;
    }

 

两个循环出结果tree

    public static void main(String[] args) {
        List<Menu> menus = getMenus(MENUS);
        Map<Integer, List<Menu>> map = new HashMap();
        for (Menu menu : menus) {
            if (!map.containsKey(menu.getPid())) {
                map.put(menu.getPid(), new ArrayList<>());
            }
            map.get(menu.getPid()).add(menu);
        }
        for (Menu menu : menus) {
            menu.setChildren(map.get(menu.getId()));
        }
        List<Menu> res = map.get(0);
        System.out.println(res);
    }

结果图

 

标签:map,搞定,菜单,String,menu,tree,menus,split,Menu
From: https://www.cnblogs.com/LcxSummer/p/17319302.html

相关文章

  • electron加载远程和本地右键菜单冲突问题处理
    electron加载远程页面,远程页面有自己的右键,但是electron也有自己的菜单,为了防止两个右键菜单同时显示,使用window.myrightmenu进行限制,window.myrightmenu非空则显示远程的,window.myrightmenu为空则显示electron的默认菜单。下面是远程界面代码://右键rightClick(ro......
  • Codeforces Round #303 (Div. 2) E. Paths and Trees (最短路+变形最小生成树)
    题目地址:E.PathsandTrees模拟了一场CF,这场实在太水了。。边玩边做的。。最后半分钟交了一发E题。。不幸AK绝杀失败。。。。首先的思路肯定是先求最短路,把可能为最短路的边挑出来,然后第二步我本来写的是直接用无向图的最小生成树,于是绝杀失败。。。后来才发现这样是不行的。......
  • Codeforces Round #316 (Div. 2) D. Tree Requests (DFS序)
    题目地址:http://codeforces.com/contest/570/problem/D比赛的时候实在没想到DFS序,。。想到DFS序后,分别存起每个深度的所有节点的DFS序,处理出前缀异或和,然后二分找到两个端点,再异或一下,就求出了所求区间的异或和,由于偶数次的都被异或掉了,所以判断下奇数次数是否大于1即可。代码......
  • HDU 4812 D Tree (树上点分治)
    题目地址:HDU4812这题是13年南京区域赛的现场题。树分治思想。树分治的过程中记录下每个子树的所有到达根的路径的积,用best记录下每个积的最小端点,然后再枚举当前子树的每个积,然后用逆元的方法求出当积为k时所需要的另一个端点值,并更新答案。代码如下:#include<iostream>#......
  • SPOJ 375 QTREE系列-Query on a tree (树链剖分)
    题目地址:SPOJ375树链剖分第一发!果然是个貌似很高级的数据结构,其实就是把树的边从树形结构转化成了线性结构,从而可以用线段树或树状数组之类的数据结构进行快速维护。从而将时间缩到n*log(2*n).这题用的线段树维护的。代码如下:#include<iostream>#include<string.h......
  • POJ 3237 Tree (树链剖分)
    题目地址:POJ3237这题用了一下午。。本来一直认为max和min两个数组是不用改的,只需要改lazy数组,然后在查询的时候利用lazy标记来返回max或-min,后来发现错的很严重。。这题要在pushdown中修改max和min数组,从而实现最大值取反。代码如下:#include<iostream>#include<strin......
  • Element Plus Tree 树 回显
     <el-form-itemlabel="菜单权限">       <el-tree:data="navList"ref="treeRef"  node-key="menuId"highlight-current=“true”:props="defaultProps" @check="checked" show-checkboxcl......
  • TreeMap源码
          常见面试题:    ......
  • 搞定第二、三、四层交换机,这是我见过最好的分析
    晚上好,我是老杨。网络设备呢,都是对应工作在OSI(开放系统互连参考模型)这个开放模型的某个层次上的。工作的层次越高,说明其设备的技术性越高,性能也越好,档次也就越高。因此,根据工作的协议层交换机可分第二层交换机、第三层交换机和第四层交换机。今天,一文带你读懂,这三个交换机层级的区......
  • 自己动手,通过源码找回 Ant-Design-Blaozr 中 Tree 组件的搜索筛选效果
    最近更新一个Blazorserver的项目,顺带把用到的Ant-Design-Blazor升级到了最新的0.14.4,结果发现之前在0.8.4版本中Tree组件的搜索显示效果变了,从仅显示找到的节点变成了在全部节点中高亮显示匹配的结果,为了节省用户沟通成本(就是懒得跟最终用户费口舌解释),于是自己动手把这个......