java查询生成树形菜单

复制代码
 1     public List<CategoryEntity> treeList() {
 2         List<CategoryEntity> categoryEntities = baseMapper.selectList(null);
 3         
 4         List<CategoryEntity> treeList = categoryEntities.stream()
 5                 // 查找一级分类
 6                 .filter(categoryEntity -> categoryEntity.getParentCid() == 0)
 7                 // 递归设置二级分类
 8                 .map(categoryEntity -> {
 9                     categoryEntity.setChildren(getChildrens(categoryEntity, categoryEntities));
10                     return categoryEntity;
11                 })
12                 // 根据sort字段进行排序
13                 .sorted((categoryEntity1, categoryEntity2) -> {
14                     return (categoryEntity1.getSort() == null ? 0 : categoryEntity1.getSort()) - (categoryEntity2.getSort() == null ? 0 : categoryEntity2.getSort());
15                 })
16                 // 收集处理完成的数据{parent: children[]}
17                 .collect(Collectors.toList());
18         return treeList;
19     }
20 
21     private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> categoryEntities) {
22         /**
23         CategoryEntity root 当前节点
24         List<CategoryEntity> categoryEntities 要进行匹配的集合
25         */
26         List<CategoryEntity> children = categoryEntities.stream()
27                 .filter(categoryEntity -> categoryEntity.getParentCid() == root.getCatId())
28                 .map(categoryEntity -> {
29                     categoryEntity.setChildren(getChildrens(categoryEntity, categoryEntities));
30                     return categoryEntity;
31                 })
32                 .sorted((categoryEntity1, categoryEntity2) -> {
33                     return (categoryEntity1.getSort() == null ? 0 : categoryEntity1.getSort()) - (categoryEntity2.getSort() == null ? 0 : categoryEntity2.getSort());
34                 })
35                 .collect(Collectors.toList());
36         return children;
37     }
复制代码
posted @   奶油炒白菜  阅读(222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
点击右上角即可分享
微信分享提示