当前位置: 首页 > news >正文

菜单子节点的写法

菜单子节点的写法

  • 1.测试数据
  • 2.实现代码
  • 3.获取父ID层级

1.测试数据

1.表结构SQL

CREATE TABLE `test` (`id` int DEFAULT NULL,`u_id` int DEFAULT NULL,`p_u_id` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2.数据SQL

INSERT INTO test (id,u_id,p_u_id) VALUES(1,1,0),(2,2,0),(3,3,0),(4,11,1),(5,12,1),(6,21,2),(7,22,2),(8,211,21),(9,221,22),(10,222,22),(11,223,22),(12,2231,223),(13,2232,223),(14,0,-1);

3.查询表数据

select * from test;

在这里插入图片描述

2.实现代码

1.pojo代码

@TableName("test")
@Data
public class Test implements Serializable {private Integer id;private Integer uId;private Integer pUId;@TableField(exist = false)private List<Test> testChains;@TableField(exist =false)private String treeId;}

2.service层代码

    @Overridepublic List<String> treeIds() {List<Test> list = this.list();return list.stream().filter(e -> e.getPUId() == -1).peek((tId) -> {tId.setTestChains(getChildren(tId, list));}).toList();}private List<Test> getChildren(Test test, List<Test> all) {return all.stream().filter(x->x.getPUId() != null).filter(categoryEntity -> {return categoryEntity.getPUId().equals(test.getUId());}).peek(treeId -> {treeId.setTestChains(getChildren(treeId, all));}).collect(Collectors.toList());}
}

3.测试结果

[{"id": 14,"testChains": [{"id": 1,"testChains": [{"id": 4,"testChains": [],"treeId": null,"puid": 1,"uid": 11},{"id": 5,"testChains": [],"treeId": null,"puid": 1,"uid": 12}],"treeId": null,"puid": 0,"uid": 1},{"id": 2,"testChains": [{"id": 6,"testChains": [{"id": 8,"testChains": [],"treeId": null,"puid": 21,"uid": 211}],"treeId": null,"puid": 2,"uid": 21},{"id": 7,"testChains": [{"id": 9,"testChains": [],"treeId": null,"puid": 22,"uid": 221},{"id": 10,"testChains": [],"treeId": null,"puid": 22,"uid": 222},{"id": 11,"testChains": [{"id": 12,"testChains": [],"treeId": null,"puid": 223,"uid": 2231},{"id": 13,"testChains": [],"treeId": null,"puid": 223,"uid": 2232}],"treeId": null,"puid": 22,"uid": 223}],"treeId": null,"puid": 2,"uid": 22}],"treeId": null,"puid": 0,"uid": 2},{"id": 3,"testChains": [],"treeId": null,"puid": 0,"uid": 3}],"treeId": null,"puid": -1,"uid": 0}
]

3.获取父ID层级

1.pojo代码

@TableName("test")
@Data
public class Test implements Serializable {private Integer id;private Integer uId;private Integer pUId;@TableField(exist = false)private List<Test> testChains;@TableField(exist =false)private String treeId;}

2.service层代码

 @Overridepublic List<String> treeIds() {List<Test> list = this.list();List<Test> collect = list.stream().peek((tId) -> {tId.setTreeId(tId.getUId().toString());tId.setTestChains(getChildren(tId, list));}).toList();return collect.stream().map(Test::getTreeId).toList();}private List<Test> getChildren(Test test, List<Test> all) {return all.stream().filter(x->x.getPUId() != null).filter(categoryEntity -> {return categoryEntity.getPUId().equals(test.getUId());}).peek(treeId -> {treeId.setTreeId((test.getTreeId() == null? test.getUId() : test.getTreeId())+"/"+treeId.getUId());treeId.setTestChains(getChildren(treeId, all));}).collect(Collectors.toList());}

3.测试结果

["0/1","0/2","0/3","0/1/11","0/1/12","0/2/21","0/2/22","0/2/21/211","0/2/22/221","0/2/22/222","0/2/22/223","0/2/22/223/2231","0/2/22/223/2232","0"
]

相关文章:

菜单子节点的写法

菜单子节点的写法 1.测试数据2.实现代码3.获取父ID层级 1.测试数据 1.表结构SQL CREATE TABLE test (id int DEFAULT NULL,u_id int DEFAULT NULL,p_u_id int DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;2.数据SQL INSERT INTO test (i…...

系统架构设计:9 论软件系统架构评估及其应用

目录 一 架构评估的意义 1 性能 2 可用性 3 安全性 4 可修改性 5 易用性...

javaee SpringMVC中json的使用

jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…...

【系统架构】软件架构的演化和维护

导读&#xff1a;本文整理关于软件架构的演化和维护知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑&#xff0c;基于大量项目实践经验基础上&#xff0c;不断加深理论体系的理解&#xff0c;从而能够创造新解决系统相关问题。 目录 1、软件架构演化和定义 …...

一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 1. 引言 &#x1f4d8; 2. 使用方法 &#x1f4d8; 3. 实现原理 &#x1f4d8; 4. 写到最后…...

前后端分离计算机毕设项目之基于SpringBoot的无人智慧超市管理系统的设计与实现《内含源码+文档+部署教程》

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…...

从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意&#xff1a; 1. 这种存…...

MyCat-web安装文档:安装Zookeeper、安装Mycat-web

安装Zookeeper A. 上传安装包 zookeeper-3.4.6.tar.gzB. 解压 #解压到当前目录&#xff0c;之后会生成一个安装后的目录 tar -zxvf zookeeper-3.4.6.tar.gz#加上-c 代表解压到指定目录 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/C. 在安装目录下&#xff0c;创建数据…...

Ajax跨域访问,访问成功但一直走error不走success的的问题解决

Ajax跨域访问,访问成功但一直走error不走success的的问题解决 通过搜索各种资料&#xff0c;终于解决啦&#xff0c;废话不多说了&#xff0c;还是老规矩直接上代码&#xff1a; 我这里用了jsonp&#xff0c;有想了解的点击 : jsonp 前端代码&#xff1a; $.ajax({type:post…...

水星 Mercury MIPC251C-4 网络摄像头 ONVIF 与 PTZ 云台控制

概况 最近在 什么值得买 上发现一款水星的网络摄像头, 除了支持云台/夜视功能之外, 还标明支持 onvif 协议. 所以想着买来接入到 HomeAssistat 作为监控使用.可到手之后发现事情并没有那么简单, 记录如下. 接入 HomeAssistant 按照 HA 的文档 ONVIF Camera 接入无非就是配置文件…...

Reactor 模式网络服务器【I/O多路复用】(C++实现)

前导&#xff1a;本文是 I/O 多路复用的升级和实践&#xff0c;如果想实现一个类似的服务器的话&#xff0c;需要事先学习 epoll 服务器的编写。 友情链接&#xff1a; 高级 I/O【Linux】 I/O 多路复用【Linux/网络】&#xff08;C实现 epoll、select 和 epoll 服务器&#x…...

2019年[海淀区赛 第2题] 阶乘

题目描述 n的阶乘定义为n!n*(n -1)* (n - 2)* ...* 1。n的双阶乘定义为n!!n*(n -2)* (n -4)* ...* 2或n!!n(n - 2)*(n - 4)* ...* 1取决于n的奇偶性&#xff0c;但是阶乘的增长速度太快了&#xff0c;所以我们现在只想知道n!和n!!末尾的的个数 输入格式 一个正整数n &#xff…...

CMM—软件企业走向世界的通行证

正当我国计算机软件行业2000年实现产值235亿元&#xff0c;为自己九十年代年均30%的增长沾沾自喜的时候&#xff0c;从邻国印度传来捷报&#xff1a;1999-2000年度&#xff0c;印度软件产业实现产值56.5亿美元&#xff0c;其中出口40.5亿美元&#xff0c;占目前印度出口总额的1…...

基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到MATLAB,结果如下所示&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps…...

华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍RabbitMQ的Docker版本安装和配置&#xff0c;延迟插件的安装&#xff1b;结合QQ邮箱和阿里云短信验证码…...

解决Linux安装AppImage文件chrome-sandbox出错问题

问题产生 在Linux版Another Redis Desktop Manager的时候&#xff0c;打开无反应&#xff0c;使用命令行运行&#xff0c;出现了下面的报错信息&#xff1a; linux: FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured co…...

Axios、SASS学习笔记

目录 前言 一、Axios基础认识 1、简介 2、相关文档 3、基本配置 4、基础快捷使用 二、Axios封装 1、公共配置文件 2、细化每个接口的配置 3、使用并发送请求 三、SASS 1、简介 2、相关文档 3、使用前奏 4、使用变量 5、嵌套规则 6、父级选择器标识 & 前言…...

开发工作中常用到的免费API分享

企业行政许可&#xff1a;通过公司名称/公司ID/注册号或社会统一信用代码获取企业行政许可信息&#xff0c;企业行政许可信息包括许可文件名称、决定许可机关、许可内容、决定日期/有效期自、截止日期/有效期至、数据来源等。企业作品著作权&#xff1a;通过公司名称/公司ID/注…...

外汇天眼:三大方法提高容错率——成功投资者的秘密策略!

容错率是什么&#xff1f; 虽然A股市场投资体验不佳&#xff0c;但相较于中概股市场的波动&#xff0c;A股投资者仍有幸福感。以中概股的代表&#xff0c;金龙指数ETF为例&#xff0c;仅一年多时间内从85.90元下跌至20.47元&#xff0c;跌幅高达76%。 然而&#xff0c;有一位…...

设计模式-状态模式

介绍 一个对象有状态变化每次状态变化都会触发一个逻辑不能总是用if else来控制 示例 交通信号灯不同颜色的变化 UML类图 传统UML类图 简化后的UML类图 代码演示 // 状态&#xff08;红灯、绿灯、黄灯&#xff09; class State {constructor(color) {this.color col…...

Simulink Simscape传感模块实战指南:从基础到高级应用

1. Simscape传感模块基础入门 第一次接触Simulink Simscape的传感模块时&#xff0c;我完全被那些复杂的参数搞晕了。后来才发现&#xff0c;这些模块其实就是物理系统的"眼睛"和"耳朵"&#xff0c;专门用来捕捉机械系统中的各种运动状态和力学特性。举个生…...

Lattice FPGA开发实战:Diamond与ModelSim协同仿真环境搭建全攻略

1. 环境准备&#xff1a;软件安装与基础配置 第一次接触Lattice FPGA开发时&#xff0c;最头疼的就是仿真环境的搭建。我清楚地记得去年接手MachXO2项目时&#xff0c;光是让Diamond和ModelSim这两个"老伙计"协同工作就折腾了整整两天。不过别担心&#xff0c;跟着我…...

从零到精通:Human Resource Machine 全关卡高效解法与思维跃迁指南

1. 为什么《Human Resource Machine》是程序员的最佳思维训练场 第一次打开《Human Resource Machine》时&#xff0c;我以为这不过是个披着编程外衣的小游戏。但当我卡在"第三年"的关卡整整一个下午后&#xff0c;才意识到这可能是最接近真实编程思维的训练场。这款…...

手把手教你用Python打造一个简易图片颜色替换工具(含Tkinter GUI界面)

用Python和Tkinter构建智能图片颜色替换工具&#xff1a;从零到一的完整开发指南 在数字图像处理领域&#xff0c;颜色替换是一个基础但极其实用的功能。想象一下&#xff0c;你有一张产品照片需要快速调整主色调&#xff0c;或者需要将证件照的背景色统一更换——传统方式可能…...

SWF逆向工程行业报告:JPEXS Free Flash Decompiler市场份额2025深度分析

SWF逆向工程行业报告&#xff1a;JPEXS Free Flash Decompiler市场份额2025深度分析 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在Flash技术逐渐退出主流但仍有大量历史资产需要维护…...

SpringBoot+Vue实战:手把手教你搭建社区居民健康档案管理系统(附完整源码)

SpringBootVue实战&#xff1a;从零构建社区居民健康档案管理系统 在数字化转型浪潮下&#xff0c;社区卫生服务正经历着从纸质档案到智能化管理的转变。对于Java开发者而言&#xff0c;这不仅是技术练兵的好机会&#xff0c;更是解决实际社会需求的切入点。本文将带你用Spring…...

lite-avatar形象库入门:如何查找、预览并下载心仪的数字人形象

lite-avatar形象库入门&#xff1a;如何查找、预览并下载心仪的数字人形象 1. 数字人形象库简介 在数字人项目开发中&#xff0c;一个合适的虚拟形象往往能让用户体验大幅提升。lite-avatar形象库正是为解决这一需求而生的专业资源库。 这个基于HumanAIGC-Engineering/LiteA…...

手把手教你用readelf解析DWARF栈信息(含常见错误排查)

深入解析DWARF栈信息&#xff1a;从readelf实战到疑难排查 调试二进制文件时&#xff0c;栈信息的解析往往是定位问题的关键。当程序崩溃或异常时&#xff0c;理解调用栈的状态不仅能帮助我们快速定位问题&#xff0c;还能揭示更深层次的运行机制。本文将带你深入探索如何利用r…...

别再只会用PS修图了!用Python的Richardson-Lucy算法,5分钟搞定模糊老照片修复

用Python拯救模糊老照片&#xff1a;零基础也能上手的Richardson-Lucy算法实战 翻箱倒柜找到一张泛黄的老照片&#xff0c;却发现画面模糊得连人脸都看不清&#xff1f;别急着叹气&#xff0c;更不用花大价钱找专业修图师。今天我要分享一个连Python新手都能轻松上手的黑科技—…...

如何一键完成飞书文档格式转换:3种高效迁移方法指南

如何一键完成飞书文档格式转换&#xff1a;3种高效迁移方法指南 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 想要将飞书文档快速转换为Markdown格式吗&#xff1f;feishu2md项目为您提供了一键…...