Stream流递归查询部门树

Java 递归查询树是很常见的功能,也有很多写法,小编这里记录stream流递归部门树写法,自从小编用上stream流之后,是爱不释手,的确是个不错的好东西,话不多说,直接上代码

第一步:先创建dept部门表,简单塞点数据
在这里插入图片描述
第二步:创建实体类

package com.example.work.entity;import lombok.Data;@Data
public class Dept {/*** 主键id*/private Integer id;/*** 部门名称*/private String deptName;/*** 父级id*/private Integer parentId;
}

第三步:创建部门vo对象

package com.example.work.vo;import com.example.work.entity.Dept;
import lombok.Data;import java.util.List;/*** @Description: 部门树vo* @Author: lyz* @CreateTime: 2024-01-11*/
@Data
public class DeptTreeVO extends Dept {private List<DeptTreeVO> childrenList;
}

第三步:编写controller层

package com.example.work.controller;import com.baomidou.mybatisplus.extension.api.R;
import com.example.work.service.DeptService;
import com.example.work.vo.DeptTreeVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @Description: TODO* @Author: lyz* @CreateTime: 2024-01-11*/
@RestController
@RequestMapping("dept")
public class DeptController {@AutowiredDeptService deptService;/*** @Description: 部门树* @return R**/@GetMapping("/getTreeList")public R getTreeList(){List<DeptTreeVO> treeVOList = deptService.getTreeList();return R.ok(treeVOList);}
}

第四步:业务层代码逻辑实现

package com.example.work.service.impl;import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.work.dao.DeptMapper;
import com.example.work.entity.Dept;
import com.example.work.service.DeptService;
import com.example.work.vo.DeptTreeVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;/*** @Description: TODO* @Author: lyz* @CreateTime: 2024-01-11*/
@Service
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {@Overridepublic List<DeptTreeVO> getTreeList() {List<DeptTreeVO> deptTreeVOList = new ArrayList<>();List<Dept> list = this.list();list.forEach(dept -> {DeptTreeVO deptTreeVO = new DeptTreeVO();BeanUtils.copyProperties(dept, deptTreeVO);deptTreeVOList.add(deptTreeVO);});//获取父部门信息List<DeptTreeVO> deptTreeVOS = deptTreeVOList.stream().filter(x -> x.getParentId() == 0).map(deptTreeVO -> {deptTreeVO.setChildrenList(getChildrenList(deptTreeVO, deptTreeVOList));return deptTreeVO;}).collect(Collectors.toList());return deptTreeVOS;}/*** @return List<DeptTreeVO> 子部门信息* @Description: 递归查询子部门* @param[1] root 父部门* @param[2] deptTreeVOList 所有部门**/private List<DeptTreeVO> getChildrenList(DeptTreeVO root, List<DeptTreeVO> deptTreeVOList) {List<DeptTreeVO> childrenList = deptTreeVOList.stream().filter(x -> {return Objects.equals(x.getParentId(), root.getId());}).map(deptTreeVO -> {deptTreeVO.setChildrenList(getChildrenList(deptTreeVO, deptTreeVOList));return deptTreeVO;}).collect(Collectors.toList());return childrenList;}
}

第五步:启动程序,并调用接口,结果如下
在这里插入图片描述
stream流递归查询部门树,你学会了吗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/238436.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

云联接&#xff08;Cloud Connect&#xff09;源于软件定义广域网&#xff08;SD-WAN&#xff09;。 软件定义广域网由于技术应用性强&#xff0c;近年来从一个由软件定义网络&#xff08;SDN&#xff09;部分衍生的分支概念发展为大规模普适的实践技术&#xff0c;已成为建立…

拼多多今年的校招薪资。。。

拼多多校招情况分析 关于校招情况分析&#xff0c;我们写过了争议巨巨巨巨大的 华为、互联网宇宙厂 字节跳动 以及如今有点高攀不起的新能源车企 比亚迪。 群里收集过小伙伴的意见&#xff0c;除上述大厂以外&#xff0c;大家最感兴趣的还是市值刚超过阿里的砍厂&#xff1a;拼…

算法训练营Day40

#Java #动态规划 Feeling and experiences&#xff1a; 单词拆分&#xff1a;力扣题目链接 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典…

网页设计与网站建设作业html+css+js,一个简易的游戏官网网页

一个简易的游戏网页 浏览器查看 目录结构 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

NLP论文阅读记录 - 2021 | WOS 使用分层多尺度抽象建模和动态内存进行抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization with Hierarchical Multi-scale Abstraction Modeling and Dy…

代码随想录 Leetcode202. 快乐数

题目&#xff1a; 代码(首刷自解 2024年1月15日&#xff09;&#xff1a; class Solution { public:bool isHappy(int n) {unordered_set<int> hash;while(n ! 1) {int sum 0;while(n/10 ! 0) {sum (n % 10)*(n % 10);n/10;}sum n*n;if (hash.find(sum) ! hash.end()…

R语言【paleobioDB】——pbdb_richness():绘制指定类群的数量丰度

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新&#xff0c;该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后&#xff0c;执行本地安装。 Usage pbdb_richness (data, rank, res, temporal_ex…

写点东西《Docker入门(上)》

写点东西《Docker入门&#xff08;上&#xff09;》 环境变量 Docker 镜像 Docker CMD 与 ENTRYPOINT 有什么区别 Docker 中的网络&#xff1a; Docker 存储&#xff1a; Docker 是一个工具&#xff0c;允许开发人员将他们的应用程序及其所有依赖项打包到一个容器中。然后&…

Python图像处理实战:使用PIL库批量添加水印的完整指南【第27篇—python:Seaborn】

文章目录 1. 简介2. PIL库概述3. PIL库中涉及的类4. 实现原理5. 实现过程5.1 原始图片5.2 导入相关模块5.3 初始化数据5.4 水印字体设置5.5 打开原始图片并创建存储对象5.6 计算图片和水印的大小5.7 选择性设置水印文字5.8 绘制文字并设置透明度5.9 遍历获取图片文件并调用绘制…

解决PS“暂存盘已满”错误

问题&#xff1a;PS“暂存盘已满”错误 原因&#xff1a; PS在运行时会将文件的相关数据参数保存到暂存区。当提醒暂存盘满时&#xff0c;说明你当前PS运行的使用盘符空间不足&#xff0c;所以在运行时一定要保留有足够的盘符空间来运行PS。 效果图 解决方案 注意: 我们在使用P…

vue 组件 import make sure to provide the “name“ option.

百度了好多结果&#xff0c;都过时了&#xff0c;例如&#xff1a; 模块引入是否加{} 再比如&#xff1a; 对于递归组件&#xff0c;请确保提供“name”选项。 出现该错误情况之一&#xff1a; 错误由未正确引入组件或子组件引起&#xff0c;如element-ui中form表单组件未引…

css 怎么绘制一个带圆角的渐变色的边框

1&#xff0c;可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 <div class"cover-wrapper"> <div class"item-cover…

AI Agent:大模型的下一个高地

科技云报道原创。 当所有人都沉浸在与ChatGPT对话的乐趣中&#xff0c;一场静水流深的变革已然启动。 2023年11月&#xff0c;比尔盖茨发表了一篇文章&#xff0c;他表示&#xff0c;AI Agent将是大模型之后的下一个平台&#xff0c;不仅改变每个人与计算机互动的方式&#x…

Linux 常用进阶指令

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…

如何使用CFImagehost结合内网穿透搭建私人图床并无公网ip远程访问

[TOC] 推荐一个人工智能学习网站点击跳转 1.前言 图片服务器也称作图床&#xff0c;可以说是互联网存储中最重要的应用之一&#xff0c;不仅网站需要图床提供的外链调取图片&#xff0c;个人或企业也用图床存储各种图片&#xff0c;方便随时访问查看。不过由于图床很不挣钱&a…

NLP论文阅读记录 - 2021 | 使用深度强化模型耦合上下文单词表示和注意机制的自动文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 单词表示2.2 文本摘要方法 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Automatic text summarization us…

【IEEE会议征稿通知】第五届计算机视觉、图像与深度学习国际学术会议(CVIDL 2024)

第五届计算机视觉、图像与深度学习国际学术会议&#xff08;CVIDL 2024&#xff09; 2024 5th International Conference on Computer Vision, Image and Deep Learning 第五届计算机视觉、图像与深度学习国际学术会议&#xff08;CVIDL 2024&#xff09;定于2024年4月19-21日…

【深基9.例4】求第 k 小的数#洛谷(MLE)

题目描述 输入 n n n&#xff08; 1 ≤ n < 5000000 1 \le n < 5000000 1≤n<5000000 且 n n n 为奇数&#xff09;个数字 a i a_i ai​&#xff08; 1 ≤ a i < 10 9 1 \le a_i < {10}^9 1≤ai​<109&#xff09;&#xff0c;输出这些数字的第 k k k 小…

友思特分享丨高精度彩色3D相机:开启崭新的彩色3D成像时代

来源&#xff1a;友思特 机器视觉与光电 友思特分享丨高精度彩色3D相机&#xff1a;开启崭新的彩色3D成像时代 原文链接&#xff1a;https://mp.weixin.qq.com/s/vPkfA5NizmiZmLiy_jv3Jg 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 3D成像的新时代 近年来&#…

pycharm Terminal命令行设置默认是Windows Powershell运行报错怎么修改?

目录 1. 真实案例 2. 如何做 3. 流程 3.1. 打开 settings 3.2. 在 最上方搜索 terminal 3.3. 在 shell path 里选择 cmd&#xff0c;并点击 OK 3.4. 重新打开 terminal 就成功了 1. 真实案例 使用 Windows Powershell 运行部分命令会不显示 2. 如何做 需要修改底部默认…