欢迎关注方志朋的博客,回复”666“获面试宝典

可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来,然后通过流式处理,我们一起来看看,代码实现为了实现简单,就模拟查看数据库所有数据到List里面。

实体类:Menu.java

/*** Menu* @author lcry*/
@Data
@Builder
public class Menu {/*** id*/public Integer id;/*** 名称*/public String name;/*** 父id ,根节点为0*/public Integer parentId;/*** 子节点信息*/public List<Menu> childList;public Menu(Integer id, String name, Integer parentId) {this.id = id;this.name = name;this.parentId = parentId;}public Menu(Integer id, String name, Integer parentId, List<Menu> childList) {this.id = id;this.name = name;this.parentId = parentId;this.childList = childList;}}

递归组装树形结构:

@Testpublic void testtree(){//模拟从数据库查询出来List<Menu> menus = Arrays.asList(new Menu(1,"根节点",0),new Menu(2,"子节点1",1),new Menu(3,"子节点1.1",2),new Menu(4,"子节点1.2",2),new Menu(5,"根节点1.3",2),new Menu(6,"根节点2",1),new Menu(7,"根节点2.1",6),new Menu(8,"根节点2.2",6),new Menu(9,"根节点2.2.1",7),new Menu(10,"根节点2.2.2",7),new Menu(11,"根节点3",1),new Menu(12,"根节点3.1",11));//获取父节点List<Menu> collect = menus.stream().filter(m -> m.getParentId() == 0).map((m) -> {m.setChildList(getChildrens(m, menus));return m;}).collect(Collectors.toList());System.out.println("-------转json输出结果-------");System.out.println(JSON.toJSON(collect));}/*** 递归查询子节点* @param root  根节点* @param all   所有节点* @return 根节点信息*/private List<Menu> getChildrens(Menu root, List<Menu> all) {List<Menu> children = all.stream().filter(m -> {return Objects.equals(m.getParentId(), root.getId());}).map((m) -> {m.setChildList(getChildrens(m, all));return m;}).collect(Collectors.toList());return children;}

格式化打印结果:

来源:blog.csdn.net/qq_19244927/

article/details/106481777

热门内容:
  • 雷军做程序员时写的博客

  • 学废了!面试官常问的14个......

  • 抖音的服务器究竟有多大?

  • 我研究了一个月阿里的岗位JD,不曾想.....

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

Java8 Stream流递归,几行代码搞定遍历树形结构相关推荐

  1. 万万想不到 10行代码搞定一个决策树

    01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...

  2. resnet50代码_13、SOTA论文实践-学习ResNet(80行代码搞定残差backbone网络)

    0.论文 Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB I ...

  3. python做事件研究法_35行代码搞定事件研究法(上)

    作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...

  4. 35行代码搞定事件研究法(下)

    作者简介: 祝小宇,个人公众号:大猫的R语言课堂 前文推送: 35行代码搞定事件研究法(上) Hello亲爱的小伙伴们,上期已经讲到如何对单一事件日计算超额收益,本期将会教大家如何针对多个股票多个事件 ...

  5. 国外stripe支付,超简单几行代码搞定

    国外stripe支付,超简单几行代码搞定 海外的项目 需要stripe支付 很简单 几行代码 先加入依赖: compile 'com.stripe:stripe-android:6.1.2' 总共两种 ...

  6. java微信支付代码_10行代码搞定微信支付(Java版)

    原标题:10行代码搞定微信支付(Java版) 微信支付痛点 对于大多数同学来说,要开发微信支付可不简单.附上微信支付官方文档网页链接 从文档上可以看出,你需要解决很多问题,我就随便挑几个吧. xml与 ...

  7. 35行代码搞定事件研究法(上)

    作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...

  8. python数学公式编辑工具_1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器...

    原标题:1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器 来源:量子位 关注前沿科技 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧箫 发自 凹非寺 ...

  9. python修改文件名称唯美_5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了...

    原创:小dull鸟 python数据分析之禅 原文链接: 5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了​mp.weixin.qq.com 有时候我们做数据可视化并 ...

最新文章

  1. 机器学习中的梯度下降法
  2. 软件架构设计 温昱著 - 读书笔记
  3. mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?
  4. Hyperledger Fabric 核心模块(2)configtxgen configtx.yaml配置文件
  5. 基于Linux和MiniGUI的嵌入式系统软件开发指南(五)
  6. 比较下OceanBase的选举协议和Raft的选举协议的区别
  7. mysql binlog 增量备份
  8. php 字符串合并,如何在PHP中将两个字符串组合在一起?
  9. Pycharm 主题字体推荐(亮色)
  10. 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载-多玩法安装简单
  11. Invisible Backdoor Attack with Sample-Specific Triggers
  12. 【办公自动化Excel】制作图表
  13. 信息学奥赛一本通:1194:移动路线
  14. 三个和尚没水喝的启发
  15. Learning Saliency Propagation for Semi-Supervised Instance Segmentation
  16. DHCP,DNS,以及网关的意思和存在意义
  17. python学习-数组
  18. 树莓派4b安装Android10
  19. 开源Webgis开发1——环境配置
  20. 使用element中时间选择器和日期选择器报错Avoid mutating a prop directly since the value will be overwritte

热门文章

  1. mgr未同步 mysql_MySQL Group Replication(多主同步复制MGR)
  2. elementui 清空下拉框值_element中的select如何在下拉数据改变后清空之前的选择?...
  3. shell 中长命令的换行处理
  4. android中的回调
  5. 002:用Python设计第一个游戏
  6. idea 启动时报 error:java 无效的源发行版
  7. android处理url中的特殊字符
  8. Tomcat手动配置简述【查询留存】
  9. 设计模式笔记——Adapter
  10. 四月青少年编程组队学习(图形化四级)Task03