【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 ...
随机推荐
- vue3+vant 引入Dialog Toast都会失败报错not defined
今天在封装vant组件的时候,刚好要用到toast提示信息的组件,索性就按照官网提供的引入方法进行正常的引入,嘿,好家伙,一顿操作下来后发现竟然报Toast未定义,这就纳闷了,明明步骤都是对的啊,所以 ...
- js 实现仿百度换肤效果
图片自行换掉即可查看效果,原理就是基于tab切换的效果实现的 效果图 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <met ...
- docker构建镜像——Dockerfile
from RUN CMD EXPOSE LABEL ENV COPY 格式 COPY [--chown=<用户>:<组>]<源>...<目的> COPY ...
- 生成树协议(STP)基本知识及实验(使用eNSP)
1.基本知识--摘至<网络之路--交换专题> (1)生成树的作用:在链路层消除环路上可能出现的广播风暴. (2)生成树的工作由三部分组成:选举过程.拓扑计算.端口行为确定. 选举过程:在二 ...
- http1.1 的默认长连接 Connection: keep-alive 与 TCP KeepAlive 之间区别
HTTP 长连接,也称为 HTTP 持久连接(HTTP Persistent Connection)或 HTTP 连接重用,是一种在 HTTP 协议中实现的机制. 在传统的 HTTP 通信中,每个 H ...
- (八十七)c#Winform自定义控件-朝上的瓶子
官网 http://www.hzhcontrols.com/ 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kw ...
- 西数 WD SATA SSD 固态 蓝盘 复制和剪切速度慢
现象:速度只有4,5M,活动时间100%.用AS SSD 测试速度正常. 问题:冷数据掉速.冷数据门. 解决方法:用DiskFresh,刷新下. 刷新时间,要看你存储数据的多少.我的1T 蓝盘,用了3 ...
- Swoole v6 能否让 PHP 再次伟大?
大家好,我是码农先森. 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求.而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信 ...
- 配置 Gerrit 迁移
https://gerrit.googlesource.com/plugins/replication/+doc/master/src/main/resources/Documentation/con ...
- Spring的@Configuration和@Bean注解定义第三方bean
@Configuration和@Bean注解的使用 @Configuration标注在类上,相当于把该类作为spring的xml配置文件中<beans>,作用为:配置spring容器(应用 ...