【Java】部门集合树状顺序展示
一、需求效果:
表单的部门下拉选择时,可以展示部门的层级:
按照这个效果展示,但是不是树,还是原来的集合
二、实现方案:
用Java代码实现两个部分
1、展示Label效果处理
2、处理集合的树状排序
第一个问题用一个方法加额外字段解决
/**
* @author onCloud9
* @date 2023/7/6 10:39
* @description 层级前缀修饰方法
* @params [level]
*/
public void levelPrefixDecoration(int level) {
StringBuilder prefix = new StringBuilder();
boolean isTopOrNot = 0 == level;
if (!isTopOrNot) {
for (int i = 0; i < level; i++) prefix.append("--- ");
prefix.append(" ");
}
deLabel = prefix + sysArDeCode + " | " + deName;
}
第二个问题,使用递归实现:
4个参数,排序好的集合,当前层的集合,完整数据源集合,当前层级值
/**
* @author onCloud9
* @date 2023/7/6 09:58
* @description 部门集合树状排序递归
* @params [sortedList, levels, source]
*/
private void deptListSortRecursive(List<SysArDecoDTO> sortedList, List<SysArDecoDTO> levels, List<SysArDecoDTO> source, int levelNo) {
if (CollectionUtils.isEmpty(levels)) return;
for (SysArDecoDTO level : levels) {
level.levelPrefixDecoration(levelNo);
sortedList.add(level);
List<SysArDecoDTO> collect = source.stream().filter(x -> x.getDeParentId().equals(level.getSysArDeId())).collect(Collectors.toList());
deptListSortRecursive(sortedList, collect, source, levelNo + 1);
}
}
递归的开始,需要传递根节点集合,根节点层级值为0
@Override
public List<SysArDecoDTO> getAllocatedDepartmentList(SysArDecoDTO dto) {
List<SysArDecoDTO> deptList = baseMapper.getAllocatedDepartmentList(
Wrappers.<SysArDecoDTO>query()
.eq("dc.sys_ar_co_id", dto.getSysArCoId())
.eq(StringUtils.isNotBlank(dto.getSealupState()), "dt.sealup_state", dto.getSealupState()));
List<SysArDecoDTO> roots = deptList.stream().filter(x -> x.getDeParentId().equals(0)).collect(Collectors.toList());
List<SysArDecoDTO> list = new ArrayList<>();
deptListSortRecursive(list, roots, deptList, 0);
return list;
}
Dao的SQL语句:
/**
* 获取该公司分配的部门
* @param queryStr
* @return List<SysArDecoDTO>
* @author onCloud9
* @date 2022/10/12 15:48
*
*/
@Select(
"SELECT " +
" dt.de_name AS `deName`, " +
" dt.de_code AS `sysArDeCode`, " +
" dt.de_parent_id AS `deParentId`, " +
" dc.* " +
"FROM sys_ar_deco dc " +
"JOIN sys_ar_department dt ON dc.sys_ar_de_id = dt.id " +
"${ew.customSqlSegment} ORDER BY dt.de_code ASC"
)
List<SysArDecoDTO> getAllocatedDepartmentList(@Param(Constants.WRAPPER) QueryWrapper<SysArDecoDTO> queryStr);
【Java】部门集合树状顺序展示的更多相关文章
- java集合树状结构及源码
java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...
- B2568 比特集合 树状数组
啊啊啊,跳题坑死人.抽了一道国集的题,自己瞎编了一个算法,好像过不了而半途而废.转去看题解,发现用二维树状数组维护一下,偏移量我倒是想对了,但是维护的东西和我的完全不一样.还是有很大差距啊... 题解 ...
- 树状图展示终端目录内容-tree
以树状图列出目录的内容,让你一目了然 执行 tree 指令,它会列出指定目录下的所有文件,包括子目录里的文件. 安装 我们通过包管理工具可以方便的安装它 mac - brew install tree ...
- JAVA总结--集合
1.集合树状图 Collection:最基本的集合接口 ----List:有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问 ----ArrayList:异步 ----Linke ...
- 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示
树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...
- 将lits集合转化为树状结构
一,bean的类型: public class DeptListRES { /** * 子节点 */ private List<DeptListRES> children; private ...
- UVALive 6911---Double Swords(贪心+树状数组(或集合))
题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- Ztree行政地区树状展示
Ztree行政地区树状展示(点击加载) 效果如下: 开始贴代码: 实体类 Item,用于对Ztree的节点展示 public class Item { private String id; priva ...
- 基于ExtJs6前台,SpringMVC-Spring-Mybatis,resteasy,mysql无限极表设计,实现树状展示数据(treepanel)
先从后台讲起 1.表的设计 parent_id就是另外一条记录的id,无限极表设计可以参考 http://m.blog.csdn.net/Rookie_Or_Veteran/article/deta ...
- MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框
1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...
随机推荐
- kettle从入门到精通 第四十二课 kettle 1对多表拆分同步
1.在有的业务场景中,会涉及一对多表拆分同步的业务场景,也就是说原表是一张表,将原表字段进行拆分放入目标库中的多张表,如下面的示例将表student_third中的数据 同步到student.teac ...
- 项目管理--PMBOK 读书笔记(6)【项目进度管理】
1.紧前关系绘图法(PDM): 2.三点估算(PERT): 最可能时间(Tm).最乐观时间(To)和 最悲观时间(Tp): 三角分布: 平均估算值=(Tm+To+Tp)/3: 3.估算方法对比及应用场 ...
- babel 基础概念 & 从零到一写一个 babel 插件
babel 基础概念 简单来说,做语法转换兼容的, 复杂一点的说,babel可以将我们写的 ES6+ 的Javascript语法转换为向后兼容的语法,以便能够在旧版本的浏览器或者其他环境运行. bab ...
- 算法金 | 一个强大的算法模型,GP !!
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 高斯过程算法是一种强大的非参数机器学习方法,广泛应用于回归.分类和优化等任务中.其核心 ...
- 【干货分享】.NET人脸识别解决方案
前言 前段时间有同学在DotNetGuide技术社区交流群提问:.NET做人脸识别功能有什么好的解决方案推荐的吗?今天大姚给大家推荐2款.NET开源.免费.跨平台.使用简单的人脸识别库,希望可以帮助到 ...
- 哎,被这个叫做at least once的玩意坑麻了。
你好呀,我是歪歪. 前几天遇到一个生产问题,同一个数据在数据库里面被插入了两次,导致后续处理出现了一些问题. 当时我们首先检讨了自己,没有做好幂等校验.甚至还发现了一个低级错误:对应的表,针对订单号, ...
- Flutter 借助SearchDelegate实现搜索页面,实现搜索建议、搜索结果,解决IOS拼音问题
搜索界面使用Flutter自带的SearchDelegate组件实现,通过魔改实现如下效果: 搜素建议 搜索结果,支持刷新和加载更多 IOS中文输入拼音问题 界面预览 拷贝源码 将SearchDele ...
- Spark Structured Streaming(一)基础
1. 流处理的场景 我们在定义流处理时,会认为它处理的是对无止境的数据集的增量处理.不过对于这个定义来说,很难去与一些实际场景关联起来.在我们讨论流处理的优点与缺点时,先介绍一下流处理的常用场景. 通 ...
- Python_10 debug、类和对象
一.查缺补漏 APP测试流程梳理https://www.cnblogs.com/dengqing9393/p/6497068.html 有关类的知识点http://testingpai.com/art ...
- 实现Quartz.NET的HTTP作业调度
Quartz.NET作为一个开源的作业调度库,广泛应用于.NET应用程序中,以实现复杂的定时任务,本次记录利用Quartz.NET实现HTTP作业调度,通过自定义HTTP作业,实现对外部API的定时调 ...