一、在项目开发中,经常会遇到像菜单式的页面,如下图

数据表结构一般像一个树形结构一样

对应的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流递归实现树形结构相关推荐

  1. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  2. Java8新特性:使用Stream流递归实现遍历树形结构

    作者:Lcry blog.csdn.net/qq_19244927/article/details/106481777 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示 ...

  3. Java8新特性-使用Stream流来实现递归遍历树形结构(案例)

    Java8新特性-Stream流 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中的Stream流一次性把数据查出来 ...

  4. Java后端递归构建树形结构

    记录:在Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示. 简明:为了简化代码,引入Lombok的Jar包,可省略实体类set().get()方法. <dep ...

  5. java arraylist 遍历树_Java递归遍历树形结构

    废话不多说了,直接给大家贴代码,具体代码如下所示://菜单树形结构 public JSONArray treeMenuList(JSONArray menuList, int parentId) { ...

  6. 利用Stram来递归生成树形结构

    利用Stram来递归生成树形结构 当需要查询有子菜单,或者子部门这一类需要形成树形的数据时,我们可以使用stream流式编程写 实体类 实体类需要有一个子列,类似此处的子城市 @Data @Equal ...

  7. java Stream 流

    java Stream 流 Stream 流 流的创建 流的转化 Optianal 流的计算 Stream 流 1. Stream的定义 来自数据源的支持聚合操作的元素序列. 即一个流对外提供接口,接 ...

  8. 测试Java Stream流 parralle与 sequential的效率

    测试Java Stream流 parralle与 sequential的效率 实验环境 操作系统:win10 处理器:Intel i5-4200U 2核4线程 Java版本:1.8 实验方案 统计大小 ...

  9. Java stream流式计算详解

    Java stream流式计算详解 1. Stream概述 1.1 Stream简介 1.2 Stream分类 2. Stream操作 2.1 Stream创建 2.2 Stream无状态操作 2.3 ...

最新文章

  1. Ubuntu12.04LTS添加broadcom 802.11g无线网卡驱动
  2. 手写的奇怪vector
  3. SpringMVC对Ajax请求的处理
  4. memcached客户端_Memcached集群的使用
  5. python input函数详解_对Python3中的input函数详解
  6. 职场动物进化手册-读后感
  7. 基于JAVA的企业OA办公系统
  8. Java到底能干什么?实事求是地说一下
  9. libsvm多分类python_LIBSVM (三) 葡萄酒种类识别
  10. 在github上写个人简历——最简单却又不容易的内容罗列
  11. C++之我见--delete指针
  12. segmentation_models.pytorch实战:使用segmentation_models.pytorch图像分割框架实现对人物的抠图
  13. 思科packet tracer 配置两个不同网段的pc通过两个路由器连接
  14. [腾讯校招] 微信红包
  15. 五分频电路(50%占空比)
  16. 【mysql】mysql查询优化之索引类型、最左前缀
  17. 基于Python+Sqlite实现(图形化)民航售票管理系统【100010198】
  18. 利用决策树算法在鲍鱼数据集上对年龄进行预测
  19. [面试日记] 1,时隔五年再次开始面试
  20. bzoj1787.紧急集合(倍增LCA)

热门文章

  1. Linux安装NFS
  2. 【安卓学习之微信抢红包】 微信抢红包 1 - 知识点归纳
  3. ko文件 、insmod命令
  4. Apollo第二讲—apollo自动驾驶调试及仿真实践
  5. Spring事务内多线程处理-解决方案
  6. undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::all
  7. 北京市法官去年人均结案357件 居内地首位
  8. 向单片机flash中烧录自定义数据的方法
  9. Mac Docker入门安装使用
  10. amd兼容AM3服务器cpu型号,兼容性超强的AM2/AM2+/AM3接口_主板新闻-中关村在线