Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复”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流递归,几行代码搞定遍历树形结构相关推荐
- 万万想不到 10行代码搞定一个决策树
01决策树模拟实验 文章目录 01决策树模拟实验 要求 决策树简单介绍 搭建环境 产生数据集 划分训练集和测试集 生成决策树 Cross-Validation法 可视化决策树 10行代码搞定决策树 要 ...
- resnet50代码_13、SOTA论文实践-学习ResNet(80行代码搞定残差backbone网络)
0.论文 Camera Distance-aware Top-down Approach for 3D Multi-person Pose Estimation from a Single RGB I ...
- python做事件研究法_35行代码搞定事件研究法(上)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...
- 35行代码搞定事件研究法(下)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 前文推送: 35行代码搞定事件研究法(上) Hello亲爱的小伙伴们,上期已经讲到如何对单一事件日计算超额收益,本期将会教大家如何针对多个股票多个事件 ...
- 国外stripe支付,超简单几行代码搞定
国外stripe支付,超简单几行代码搞定 海外的项目 需要stripe支付 很简单 几行代码 先加入依赖: compile 'com.stripe:stripe-android:6.1.2' 总共两种 ...
- java微信支付代码_10行代码搞定微信支付(Java版)
原标题:10行代码搞定微信支付(Java版) 微信支付痛点 对于大多数同学来说,要开发微信支付可不简单.附上微信支付官方文档网页链接 从文档上可以看出,你需要解决很多问题,我就随便挑几个吧. xml与 ...
- 35行代码搞定事件研究法(上)
作者简介: 祝小宇,个人公众号:大猫的R语言课堂 这期大猫课堂将会教大家如何用35行R代码写出最有效率的事件研究法. 注意,本代码主要使用data.table完成,关于data.table包的相应知识 ...
- python数学公式编辑工具_1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器...
原标题:1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器 来源:量子位 关注前沿科技 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧箫 发自 凹非寺 ...
- python修改文件名称唯美_5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了...
原创:小dull鸟 python数据分析之禅 原文链接: 5行代码搞定14种常见图的python可视化库,还自带16种优美主题,真是太喜欢了mp.weixin.qq.com 有时候我们做数据可视化并 ...
最新文章
- 机器学习中的梯度下降法
- 软件架构设计 温昱著 - 读书笔记
- mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?
- Hyperledger Fabric 核心模块(2)configtxgen configtx.yaml配置文件
- 基于Linux和MiniGUI的嵌入式系统软件开发指南(五)
- 比较下OceanBase的选举协议和Raft的选举协议的区别
- mysql binlog 增量备份
- php 字符串合并,如何在PHP中将两个字符串组合在一起?
- Pycharm 主题字体推荐(亮色)
- 小程序源码:全新外卖侠cps5.6全套微信小程序源码下载-多玩法安装简单
- Invisible Backdoor Attack with Sample-Specific Triggers
- 【办公自动化Excel】制作图表
- 信息学奥赛一本通:1194:移动路线
- 三个和尚没水喝的启发
- Learning Saliency Propagation for Semi-Supervised Instance Segmentation
- DHCP,DNS,以及网关的意思和存在意义
- python学习-数组
- 树莓派4b安装Android10
- 开源Webgis开发1——环境配置
- 使用element中时间选择器和日期选择器报错Avoid mutating a prop directly since the value will be overwritte