【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 ...
随机推荐
- 【论文笔记】轻量级网络MobileNet
[深度学习]总目录 MobileNet V1:<MobileNets: Efficient Convolutional Neural Networks for MobileVision Appl ...
- 将mnist训练的caffemodel生成动态链接库DLL
在项目程序中经常看到动态链接库,非常好奇,想自己实现一下,于是乎尝试一波.就因为这种好奇,每天都被bug所困扰... 1. 训练caffemodel 在windows环境下搭建caffe无果,转投Ub ...
- js整数类型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- LeetCode 460. LFU Cache LFU缓存 (C++/Java)
题目: Design and implement a data structure for Least Frequently Used (LFU)cache. It should support th ...
- Linux扩展篇-shell编程(八)-shell字符串截取
shell字符串截取,一般包含从指定位置和从指定字符截取. 一.从指定位置截取 1) 从字符串左边开始计数 格式: ${string: start :length} 从 string 字符串的左边第 ...
- 使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法
使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法 1.打开"Windows Defender". 2.点击"病毒和威胁防护". 3.点击 ...
- .net framework 使用Apollo 配置中心
参照了:https://www.cnblogs.com/xichji/p/11324893.html Apollo默认有一个"SampleApp"应用,"DEV" ...
- .net6 .net core web api json 遇到 400 错误
环境: .net6 webapi 服务端模型声明 public class TongYiMinPgPayReq { public string mch_no { get; set; } public ...
- OpenTelemetry Logging 思维导图,收藏
Log 是最常用.最自然的监控数据类型之一,具有以下的优点: 日志的内容比指标更加丰富,可以提供更多的细节信息,帮助开发人员和运维人员更好地理解应用程序的运行状况,通过日志几乎可以重现.还原系统的完整 ...
- 简单易懂的JSON框架
分享一个由本人编写的JSON框架. JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性 ...