菜单子节点的写法

菜单子节点的写法

1.测试数据

1.表结构SQL

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

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.查询表数据

sql 复制代码
select * from test;

2.实现代码

1.pojo代码

java 复制代码
@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层代码

java 复制代码
    @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.测试结果

json 复制代码
[
    {
        "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代码

java 复制代码
@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层代码

java 复制代码
 @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.测试结果

json 复制代码
[
    "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"
]
相关推荐
qq_124987075333 分钟前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_38 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.39 分钟前
Day06——权限认证-项目集成
java
瑶山42 分钟前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy1 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
2301_818732061 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
2501_941982051 小时前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
马猴烧酒.1 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
sino爱学习2 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
风生u3 小时前
activiti7 详解
java