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,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...
随机推荐
- xBIM 学习与应用系列目录
xBIM 实战04 在WinForm窗体中实现IFC模型的加载与浏览 xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览 xBIM 实战02 在浏览器中加载IFC模型文件并设 ...
- vue.js的学习之路
因为对jquery的ajax渲染很不满,所以我就来学vue.js了 1)vue.js是什么 官方解释为:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型 ...
- go并发设计模式 --资源生成器模式
1.简单的生成器 package main import ( "fmt" "math/rand" ) func GenerateIntA()chan int { ...
- paratest
class Program { static void Main(string[] args) { long result = 0; Stopwatch Watch = new Stopwatch() ...
- nginx 日志配置不生效的问题
log_format 有个默认的日志格式: log_format combined '$remote_addr - $remote_user [$time_local] ' ' "$requ ...
- 转载:Vim 配置入门
转载:Vim 配置入门 原文地址:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 作者: 阮一峰 Vim 是最重要的编辑器之一,主要有下面几个优点. ...
- 获得a-b的差[返回BigDecimal 类型]
/*** * 返回 a-b 的差 [返回 BigDecimal 类型] * @param a 被减数 * @param b 减数 * @return */ public static BigDecim ...
- easyUI datagrid表头的合并
图列: js代码 function initConfigTable(param){ $("#mulConfigureTableBox").empty(); $("#mul ...
- JSP获取json格式的数据报错 Uncaught SyntaxError: Unexpected identifier
后台json字符串是 {"id":"cmdb_ci.`fully_qualified_domain_name`","field":" ...
- anaconda3安装pytorch【window10】
1.离线下载: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/ 在清华镜像软件站下载相应的版本,由于我之前安装了 ...