properties vim performance events extjs cocos2d html5 Plupload vue网页 web前端开发实战项目 flink教程视频 jquery的each循环 javaweb是前端还是后端 yml文件注释 python安装教程 python抛异常 random函数用法 python程序实例 java中的多态 java中的接口 java接口怎么写 java中tostring方法 java如何配置环境变量 java生成文件 java中collection java字符串操作 linux系统命令大全 beatedit js判断字符串相等 卡巴斯基离线升级包 js倒计时 微信临时链接多久失效 快手规则 平面设计软件下载 excel后缀 卧龙推广 起义任务线 x270 a1530是什么版本 淘新闻下载 ps画笔颜色
当前位置: 首页 > 学习教程  > 编程语言

java 递归构造父子菜单

2020/11/24 9:20:56 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

[{"children":Array[2],"id":1,"name":"广东","pid":0},{"children":[{"children":[{"children":Array[0],"id":6,"name":"高新开发区","pid":5}],…

[
    {
        "children":Array[2],
        "id":1,
        "name":"广东",
        "pid":0
    },
    {
        "children":[
            {
                "children":[
                    {
                        "children":Array[0],
                        "id":6,
                        "name":"高新开发区",
                        "pid":5
                    }
                ],
                "id":5,
                "name":"南昌",
                "pid":2
            }
        ],
        "id":2,
        "name":"江西",
        "pid":0
    }
]
  

   一刚从事编程不久的同学,咨询怎么查询返回父子菜单。因不确认最终有多少层级,故使用递归即可。说干就干,直接贴代码。

package com.xuyw.test;

import com.alibaba.fastjson.JSON;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test2 {
    public static void main(String[] args) {
        //mock 数据库查询
        List<Menu> menuList = getData();
        Map<Long, List<Menu>> menuMap = menuList.stream().collect(Collectors.groupingBy(Menu::getPid));
        //获取顶级菜单
        List<Menu> firStMenu = menuMap.get(0L);
        List<Menu> res = new ArrayList<>();
        for (Menu m : firStMenu) {
            List<Menu> children = menuMap.get(m.getId());
            if (children == null || children.size() == 0) {
                continue;
            }
            res.add(recursiveTree(m,menuMap));
        }
        System.out.println(JSON.toJSONString(res));
    }

    public static Menu recursiveTree(Menu node, Map<Long, List<Menu>> menuMap) {
        List<Menu> childTreeNodes = menuMap.get(node.getId());
        if(childTreeNodes==null){
            return node;
        }
        for (Menu child : childTreeNodes) {
            Menu n = recursiveTree(child, menuMap);
            node.getChildren().add(n);
        }
        return node;
    }


    public static List<Menu> getData() {
        List<Menu> data = new ArrayList<>();
        Menu menu = new Menu();
        menu.setId(1L);
        menu.setName("广东");
        menu.setPid(0L);
        data.add(menu);

        menu = new Menu();
        menu.setId(2L);
        menu.setName("江西");
        menu.setPid(0L);
        data.add(menu);

        menu = new Menu();
        menu.setId(3L);
        menu.setName("廣州");
        menu.setPid(1L);
        data.add(menu);

        menu = new Menu();
        menu.setId(4L);
        menu.setName("深圳");
        menu.setPid(1L);
        data.add(menu);

        menu = new Menu();
        menu.setId(5L);
        menu.setName("南昌");
        menu.setPid(2L);
        data.add(menu);

        menu = new Menu();
        menu.setId(6L);
        menu.setName("高新开发区");
        menu.setPid(5L);
        data.add(menu);
        return data;
    }

    @Data
    public static class Menu {
        private Long id;
        private String name;
        private Long pid;
        private List<Menu> children = new ArrayList<>();
    }
}

 


本文链接: http://www.dtmao.cc/news_show_400018.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?