【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 ...
随机推荐
- 基于ReAct机制的AI Agent
当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己的LLM推出了自己的AI Agent,比如字节的Coze,百度的千帆等,还有开源的Dify. 你是否想知道其中的原理?是否想过自己如何实现一套AI ...
- Python实现字符串模糊匹配
在一个字符串中,有时需对其中某些内容进行模糊匹配以实现条件的判定,如在"你好,hello,world"中判断是否含有"llo".Python中通过re.se ...
- CF98C Help Greg the Dwarf 题解
CF98C Help Greg the Dwarf 题解 为什么不三分? 首先我们考虑如何求出答案. 如图,考虑设夹角为 \(\theta\),那么可以得到表达式: \[[\cfrac a {\tan ...
- ABC330
D 记录每一行,每一列有多少个 o,然后统计答案即可. code E 想到 \(mex^{i \le n}_{i = 1} a_i \le n\) 这整个题就可做了(赛时因为没想到这个,痛失 \(47 ...
- pyenv-win 替换国内镜像源
前情提要 今天心血来潮想学一学python 然后因为python版本众多,了解到了pyenv这个python版本管理器 在github下载好pyenv以后,打算先安装一个稳定的版本 pyenv ins ...
- PPP协议简介
转载出处:https://blog.csdn.net/csucxcc/article/details/1684416 PPP(Point-to-Point Protocol)协议是在SLIP的基础上发 ...
- 14-vertical-aligin
01 行盒的理解 作用: 将当前行里的所有内容包裹起来 <!DOCTYPE html> <html lang="en"> <head> < ...
- python重拾基础第一天
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- Python潮流周刊的优惠券和精美电子书(EPUB、PDF、Markdown)
Python潮流周刊从 2023.05.13 连载至今,本周即将发布第 60 期,这意味着我们又要达成一个小小的里程碑啦! 每周坚持做分享,周复一周,这对自己的精力和意志是一项不小的挑战.于是,为了让 ...
- 搜索Python编程获取相关图书信息
1.获取相关图书信息 #搜索"Python编程"获取相关图书信息 from selenium import webdriver from selenium.webdriver.su ...