java代码递归部门结构树
组织所有部门树,以及条件查询部门树:
/**
* 组织部门树
* @return
*/
@Override
public List<SxyBranchVO> findAllBranchTree(String branchname) {
SxyBranchVO sxyBranchVOParam = new SxyBranchVO();
sxyBranchVOParam.setBranchcode("");
sxyBranchVOParam.setDeleteflag("1");
// 查询所有根节点root
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVOParam);
if(StringUtils.isNotBlank(branchname)){ // 按部门名称查询,将符合条件的节点组织成结构树
Set<SxyBranchVO> branchVOSet = new HashSet<>();
Set<SxyBranchVO> branchVOSetSub = new HashSet<>();
// 查询所有符合条件的子节点
List<SxyBranchVO> sxyBranchVOS = sxyBranchMapper.getBranchsByName(branchname);
for(SxyBranchVO sxyBranchVOSub : sxyBranchVOS){
sxyBranchVOSub.setDeleteflag("1");
branchVOSet.add(sxyBranchVOSub);
// 向上递归,将符合条件的节点以及其所有上级父节点放在set集合中
branchVOSetSub = buildTreeUp(sxyBranchVOSub,branchVOSetSub);
for(SxyBranchVO sbv : branchVOSetSub){
branchVOSet.add(sbv);
}
}
// 组织结构树,将符合条件的所有节点组织进结构树
List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
// 组织结构树,根节点下的所有部门
sxyBranchVO.setDeleteflag("1");
buildTree(sxyBranchVO,branchVOSet);
if(sxyBranchVO.getChildren() != null && sxyBranchVO.getChildren().size() > 0){
sxyBranchVOListNew.add(sxyBranchVO);
}
}
return sxyBranchVOListNew;
}else{ // 查询所有,将所有节点组织成结构树
for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
// 组织结构树,根节点下的所有部门
sxyBranchVO.setDeleteflag("1");
buildTreeAll(sxyBranchVO);
}
return sxyBranchVOList;
}
} /**
* 向上递归查询所有父节点(每一层的父节点只有一个)
* @param sxyBranchVOSub
* @param branchVOSetSub
* @return
*/
private Set<SxyBranchVO> buildTreeUp(SxyBranchVO sxyBranchVOSub, Set<SxyBranchVO> branchVOSetSub) {
// 向上递归查询所有父节点
SxyBranchVO sxyBranchVO = sxyBranchMapper.findParentBranchVOByParentCode(sxyBranchVOSub);
if(sxyBranchVO != null){ // 如果不是根节点
branchVOSetSub.add(sxyBranchVO);
sxyBranchVO.setDeleteflag("1");
buildTreeUp(sxyBranchVO,branchVOSetSub);
}
return branchVOSetSub;
} /**
* 递归查询子节点(向下递归,组织符合条件的结构树)
* @param sxyBranchVO
*/
private void buildTree(SxyBranchVO sxyBranchVO,Set<SxyBranchVO> branchVOSet) {
List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
for(SxyBranchVO sxyBranch : sxyBranchVOList){
for(SxyBranchVO sbr : branchVOSet){
if(sxyBranch.getBranchcode().equals(sbr.getBranchcode())){
sxyBranchVOListNew.add(sxyBranch);
}
}
}
sxyBranchVO.setChildren(sxyBranchVOListNew);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTree(sxyBranchItem,branchVOSet);
}
} /**
* 递归查询子节点(向下递归,组织所有结构树)
* @param sxyBranchVO
*/
private void buildTreeAll(SxyBranchVO sxyBranchVO) {
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
sxyBranchVO.setChildren(sxyBranchVOList);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTreeAll(sxyBranchItem);
}
}
注释掉代码,供参考:
/*private Boolean buildTreeMatch(SxyBranchVO sxyBranchVO,List<SxyBranchVO> sxyBranchVOS) {
Boolean flag = false;
// 查询直属子节点
List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
for(SxyBranchVO sb : sxyBranchVOS){
for(SxyBranchVO sbv : sxyBranchVOList){
if(sb.getBranchcode().equals(sbv.getBranchcode())){
return true;
}
}
}
if(!flag){
sxyBranchVO.setChildren(sxyBranchVOList);
for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
sxyBranchItem.setDeleteflag("1");
buildTreeMatch(sxyBranchItem,sxyBranchVOS);
}
}
return flag;
}*/
java代码递归部门结构树的更多相关文章
- OA系统部门结构树
public class DepartmentUtils { /** * @param topList 顶级部门列表 * @param removeId 删除部门的id * @return */ pu ...
- JAVA代码实现多级树结构封装对象
树结构在开发中经常遇到.例如:部门.菜单.员工架构等等.下面用部门作为例子构造部门结构树 1.部门表:dept -- ---------------------------- -- Table str ...
- 数据结构笔记--二叉查找树概述以及java代码实现
一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 四种java代码静态检查工具
[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC ...
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- java 中递归的实现 以及利用递归方法实现汉诺塔
今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- Java代码编写的一般性指导
(1) 命名规则:这个最基本,也最重要,请牢记. 1,类名首字母应该大写. 2,字段.方法以及对象(句柄)的首字母应小写. 3,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...
随机推荐
- 4.vim操作
你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法. 我建议下面这四个步骤: 存活 感觉良好 觉得更好,更强,更快 使用VIM的超能力 当 ...
- .NET Core开发:项目实践
初始化项目 本来想详细讲一讲dotnet core的,但我对于dotnet core的研究还不到一星期,半吊子,脑子又笨,就不写那些理论出来误人子弟了,还是直接来一篇实践给大家做个参考.废话不多说,直 ...
- POJ 1128 Frame Stacking 拓扑排序+暴搜
这道题输出特别坑.... 题目的意思也不太好理解.. 就解释一下输出吧.. 它让你 从下往上输出. 如果有多种情况,按照字典序从小往大输出... 就是这个多种情况是怎么产生的呢. 下面给一组样例. 很 ...
- Kafka.net使用编程入门
最近研究分布式消息队列,分享下! 首先zookeeper 和 kafka 压缩包 解压 并配置好! 我本机zookeeper环境配置如下: D:\Worksoftware\ApacheZookeep ...
- (转)Django学习之 第二章:Django快速上手
安装Python 安装Django非常容易.因为Django可以运行在任何可以运行Python的环境中,所以可以以多种方式进行配置. 在本章我们将尝试覆盖几种常见的Django安装场景. Djang ...
- 微信小程序和App的UI设计有什么异同吗?
大家总是把小程序和App放在一起比,因此我也花时间看了一下小程序的开发指南,尤其是UI部分的设计和原则,今天就拿它和苹果的HIG(Human Interface Guidelines)做个比较,其实两 ...
- 【node.js web项目】解决路由默认是hash模式(带#)
[概念讲述] 1.什么是hash模式 Vue+WebPack项目,本身是一个单页应用. vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 ...
- Thinkphp开源框架如何使用?
(一)首先是准备工作下载thinkPHP框架最新版本,解压缩到你将要开发的项目位置.杭州php操作演示如图: 其中index.php是入口文件,即所有的请求都要经过此文件才能够完成.Applicati ...
- C语言基本语法——字符串
1.什么是字符串 2.字符串与普通字符数组的区别 3.字符串的定义方式 4.字符串的使用 5.什么是字符串数组 6.字符串数组的赋值 7.字符串数组的遍历 1.什么是字符串 • 用双引号引起来的多个字 ...
- BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机+map维护Trie树)
题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而 ...