菜单子节点的写法

news2024/11/18 11:21:47

菜单子节点的写法

  • 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层代码

    @Override
    public 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层代码

 @Override
 public 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"
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决maven骨架加载慢问题(亲测解决)

1、下载archetype-catalog.xml 网站 &#xff1a; https://repo.maven.apache.org/maven2/ 2、放在这个文件夹下面 3、setting–>build–>Runner : -DarchetypeCataloglocal

访问Apache Tomcat的manager页面

配置访问Tomcat manager页面的用户名、密码、角色 Tomcat安装完成后&#xff0c;包含了一个管理应用&#xff0c;默认安装在 <Tomcat安装目录>/webapps/manager 例如&#xff1a; 要使用管理页面的功能&#xff0c;需要在conf/tomcat-users.xml文件中配置用户、密码及…

学习Consul中踩过的坑

一、杀不死的consul 通过mac的homebrew安装了consul以后&#xff0c;手动启动consul报8300端口已被占用&#xff0c;通过lsof -i:8300和lsof -i:8500查看端口占用情况&#xff0c;发现consul已经启动了。然后手动kill -9对应的进程id&#xff0c;再启动consul&#xff0c;还是…

springboot 如何更新json串里面的内容

我的需求是这样的 如果新字符串中的key在原字符串中存在&#xff0c;则更新原字符串的对应key的value。如果新字符串中的key在原字符串中不存在&#xff0c;则将新字符串中的key和value添加到原字符串中。如果原字符串中存在&#xff0c;新字符串中不存在的key&#xff0c;则不…

亚马逊买家号怎么评论?快速留评软件有哪些?

对于亚马逊买家留评&#xff0c;其实是很简单的&#xff0c;首先亚马逊买家号账号上找到你购买该产品的订单。可以点击页面上的“我的账户”或类似的链接&#xff0c;然后选择“我的订单”或“订单历史记录”。然后选择要评论的订单&#xff1a;在订单历史记录中&#xff0c;找…

CS5801电路设计|HDMI转EDP转接板方案|HDMI2.0转EDP数据采集卡方案

CS5801国产(北京集睿致远&#xff09;研发HDMI转DP/EDP(4K60)转换器方案芯片,其设计HDMI转EDP转接板方案电路&#xff1a; CS5801输入端可以是1080P、4K30、4K60HZ这三种规格,输出的接口可以是DP信号接口,或者是EDP信号接口,输入端HDMI由4路信号组成&#xff0c;支持1.62Gbps、…

openwrt rm500u ncm方式拨号步骤记录

1.进入设备页面 用户名&#xff1a;root 2.创建接口 3.配置接口 国内APN 信息 中国移动APN&#xff1a;CMNET 中国联通APN&#xff1a;3GNET 中国电信APN&#xff1a;CTNET 4.防火墙配置 5.点击Save&Apply 6.配置完成后重启设备。重新进入设备页面&#xff0c;可以看…

搭建一个Vue3+Ts+Vite项目

Vue3TsVite项目(目录篇)——如何从零到一搭建Vue3后台管理系统_从零开始搭建后台管理系统_礼貌而已的博客-CSDN博客

tomcat整体设计解析

&#x1f514;简介 简介从各个视角看tomcat tomcat是一个Servlet 容器&#xff1f;Servlet规范与tomcat实现整体架构 启动过程io处理 connector 架构io 和线程模型 业务处理 container 架构 tomcat的类加载Sprint Boot如何利用Tomcat加载Servlet&#xff1f;Tomcat如何支持异步…

Springboot+vue的应急救援物资管理系统,Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的应急救援物资管理系统&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的应急救援物资管理系统&#xff0c;采用M&#xff08;model&#xff09;V&…

mysql学习实践

这里写目录标题 查找重复数据查找重复数据的字段值以及重复的次数如果你只想查找重复数据&#xff0c;而不需要知道重复的次数&#xff0c;可以简化查询如下 根据某个字段查询重复的数据&#xff0c;并取id最大的那条数据&#xff08;用于商机列表展示&#xff09;将逗号分隔的…

SpringCloud溯源——从单体架构到微服务Microservices架构 分布式和微服务 为啥要用微服务

前言 单体架构好好的&#xff0c;为啥要用微服务呢&#xff1f;微服务究竟是啥&#xff0c;怎么来的&#xff0c;有啥优缺点&#xff0c;本篇博客尝试追根溯源&#xff0c;阐述单体应用到分布式&#xff0c;微服务的演变,微服务架构的定义及优缺点&#xff0c;厘清相关的概念。…

手摸手系列之批量修改MySQL数据库所有表中某些字段的类型

在迁移老项目的数据库时&#xff0c;使用Navicat Premium的数据传输功能同步了表结构和数据。但是&#xff0c;发现某些字段的数据类型出现了错误&#xff0c;例如&#xff0c;租户ID从Oracle的NUMBER类型变成了MySQL的decimal(10)&#xff0c;正确的应该是bigInt(20)。此外&am…

windows server 2012安装教程

虚拟机系列文章 VMware Workstation Player 17 免费下载安装教程 VMware Workstation 17 Pro 免费下载安装教程 windows server 2012安装教程 Ubuntu22.04.3安装教程 FTP服务器搭建 windows server 2012安装教程 虚拟机系列文章前言 前言 各位道友&#xff0c;大家好&#xf…

大型语言模型:RoBERTa — 一种鲁棒优化的 BERT 方法

一、介绍 BERT模型的出现导致了NLP的重大进展。BERT的架构源自Transformer&#xff0c;在各种下游任务上实现了最先进的结果&#xff1a;语言建模&#xff0c;下一句预测&#xff0c;问答&#xff0c;NER标记等。 大型语言模型&#xff1a;BERT — 来自变压器的双向编码器表示 …

Java反射(一)--- 类的实例化

文章目录 一、整理框架二、Java反射机制提供的功能三、反射相关的主要API四、相关代码&#xff1a;1.Person类2.反射之前&#xff0c;对于Person类的操作3.反射之后&#xff0c;对于Person类的操作 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、整…

数据库 explain 关键字解析

目录 1. explain 概述 2. explain 关键字的使用方式 3. explain 的版本迭代 4. explain 只分析SQL语句&#xff0c;不执行SQL语句 5. explain 输出结果中各个字段的含义 6. type 表示检索表数据的方式 7. key_len表示使用的索引的长度 8. rows 表示预估读取到的行数 9…

2023年10月9日历史上的今天大事件早读

1740年10月09日红溪惨案 1874年10月09日万国邮政联盟成立 1912年10月09日第一次巴尔干战争爆发 1913年10月09日武昌起义元勋蒋翊武被害 1924年10月09日近代翻译家林纾(林琴南)逝世 1934年10月09日南斯拉夫国王遇刺身亡 1936年10月09日红军三大主力会师 1941年10月09日第…

瑜伽馆微信小程序怎么制作约课系统

在瑜伽馆微信小程序中&#xff0c;约课系统是一个重要的功能模块&#xff0c;可以帮助用户便捷地预约和取消预约瑜伽课程。下面将介绍如何制作一个约课系统&#xff0c;让瑜伽馆微信小程序更加完善。 一、确定约课系统的功能 在制作约课系统前&#xff0c;需要明确其功能和特点…

基于Python+Selenium的web自动化测试框架详解

简介 随着Web应用程序的广泛应用和不断发展&#xff0c;Web自动化测试已经成为软件质量保证中的一个重要环节。而PythonSelenium作为一组强大的工具和框架&#xff0c;已经成为Web自动化测试领域中的热门技术之一。PythonSelenium可以帮助我们快速、准确地模拟用户行为和操作&…