java—stream流递归实现树形结构
一、在项目开发中,经常会遇到像菜单式的页面,如下图
数据表结构一般像一个树形结构一样
对应的Model体
@Data //代替get、set方法
@ApiModel("知识园地视图")
public class ContentKnowledgeVO{/**** 主键id*/@ApiModelProperty("主键id")private String knowledgeId;/****类型名称*/@ApiModelProperty("类型名称")private String knowledgeName;/**** 上级id*/@ApiModelProperty("上级id")private String parentCode;/**** 类型内容*/@ApiModelProperty("类型内容")private String knowledgeContext;/*** 默认显示状态为0* 0是显示,1是不显示*/@ApiModelProperty("显示状态")private Integer enabledState;/**** 实现递归的条件*/@ApiModelProperty("子节点列表")private List<ContentKnowledgeVO> childContentList;
}
二、Stream流实现递归结构代码
@Overridepublic List<ContentKnowledgeVO> getContentKnowledgeList() {//从数据库中查询出所有数据List<ContentKnowledgeVO> contentKnowledgeList = contentKnowledgeMapper.getContentKnowledgeList();//获取父节点,0表示父节点List<ContentKnowledgeVO> collect = contentKnowledgeList.stream().filter(e -> e.getParentCode().equals("0")).map(e -> {e.setChildContentList(getChildrens(e, contentKnowledgeList));return e;}).collect(Collectors.toList());return collect;}/*** 递归查询子节点* @param root* @param contentKnowledgeList* @return*/private List<ContentKnowledgeVO> getChildrens(ContentKnowledgeVO root, List<ContentKnowledgeVO> contentKnowledgeList) {List<ContentKnowledgeVO> childrenList = contentKnowledgeList.stream().filter(e -> Objects.equals(e.getParentCode(), root.getKnowledgeId())).map(e -> {e.setChildContentList(getChildrens(e, contentKnowledgeList));return e;}).collect(Collectors.toList());return childrenList;}
注意:适用情况一般在一个数据表中,父节点与子节点内容一样
参考博客
java—stream流递归实现树形结构相关推荐
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- Java8新特性:使用Stream流递归实现遍历树形结构
作者:Lcry blog.csdn.net/qq_19244927/article/details/106481777 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示 ...
- Java8新特性-使用Stream流来实现递归遍历树形结构(案例)
Java8新特性-Stream流 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来 ...
- Java后端递归构建树形结构
记录:在Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示. 简明:为了简化代码,引入Lombok的Jar包,可省略实体类set().get()方法. <dep ...
- java arraylist 遍历树_Java递归遍历树形结构
废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { ...
- 利用Stram来递归生成树形结构
利用Stram来递归生成树形结构 当需要查询有子菜单,或者子部门这一类需要形成树形的数据时,我们可以使用stream流式编程写 实体类 实体类需要有一个子列,类似此处的子城市 @Data @Equal ...
- java Stream 流
java Stream 流 Stream 流 流的创建 流的转化 Optianal 流的计算 Stream 流 1. Stream的定义 来自数据源的支持聚合操作的元素序列. 即一个流对外提供接口,接 ...
- 测试Java Stream流 parralle与 sequential的效率
测试Java Stream流 parralle与 sequential的效率 实验环境 操作系统:win10 处理器:Intel i5-4200U 2核4线程 Java版本:1.8 实验方案 统计大小 ...
- Java stream流式计算详解
Java stream流式计算详解 1. Stream概述 1.1 Stream简介 1.2 Stream分类 2. Stream操作 2.1 Stream创建 2.2 Stream无状态操作 2.3 ...
最新文章
- Ubuntu12.04LTS添加broadcom 802.11g无线网卡驱动
- 手写的奇怪vector
- SpringMVC对Ajax请求的处理
- memcached客户端_Memcached集群的使用
- python input函数详解_对Python3中的input函数详解
- 职场动物进化手册-读后感
- 基于JAVA的企业OA办公系统
- Java到底能干什么?实事求是地说一下
- libsvm多分类python_LIBSVM (三) 葡萄酒种类识别
- 在github上写个人简历——最简单却又不容易的内容罗列
- C++之我见--delete指针
- segmentation_models.pytorch实战:使用segmentation_models.pytorch图像分割框架实现对人物的抠图
- 思科packet tracer 配置两个不同网段的pc通过两个路由器连接
- [腾讯校招] 微信红包
- 五分频电路(50%占空比)
- 【mysql】mysql查询优化之索引类型、最左前缀
- 基于Python+Sqlite实现(图形化)民航售票管理系统【100010198】
- 利用决策树算法在鲍鱼数据集上对年龄进行预测
- [面试日记] 1,时隔五年再次开始面试
- bzoj1787.紧急集合(倍增LCA)
热门文章
- Linux安装NFS
- 【安卓学习之微信抢红包】 微信抢红包 1 - 知识点归纳
- ko文件 、insmod命令
- Apollo第二讲—apollo自动驾驶调试及仿真实践
- Spring事务内多线程处理-解决方案
- undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::all
- 北京市法官去年人均结案357件 居内地首位
- 向单片机flash中烧录自定义数据的方法
- Mac Docker入门安装使用
- amd兼容AM3服务器cpu型号,兼容性超强的AM2/AM2+/AM3接口_主板新闻-中关村在线