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,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...
随机推荐
- webrtc所有平台下载编译步骤详细说明
webrtc所有平台下载编译步骤详细说明 1.安装depot tools Windows:国外下载:https://storage.googleapis.com/chrome-infra/depot_ ...
- 编译libvlc。。。
https://wiki.videolan.org/Win32Compile按照官网教程,安装所需工具,参考 :http://qjw.qiujinwu.com/blog/2014/12/08/cros ...
- kettle的下载、安装和初步使用(Ubuntu 16.04平台下)(图文详解)
不多说,直接上干货! 能够看我这篇博客的博友们,想必是已经具备一定基础了. 扩展博客 kettle的下载.安装和初步使用(windows平台下)(图文详解) kettle的下载 Kettle可以在h ...
- Oracle学习系类篇(二)
1.Oracle对表的增删改 1.1添加列 1.2修改列 1.3 删除列 1.4 修改表名称 1.5 修改列名称 1.6 删除主键约束 1.7 添加主键约束 1.8 添加外键约束
- javascript中document.getElementsByClassName兼容性封装方法一
var getElmsByClsName = function(className, results) { results = results || []; // 判断浏览器是否支持 getEleme ...
- depth peeling实现半透明
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aH
- django前端到后端一次完整请求实例
一.创建项目:# django-admin startproject mysite# cd mysite# python manage.py startapp blog 目录结构: 一.html文件: ...
- CDR查找替换对象操作详解
您可以使用CorelDRAW软件中提供的查找和替换向导,在绘图中定位和编辑对象.这在设计绘图中经常用到,查找和替换中为用户提供多种搜索方法,其中包括包含对象类型及其相关属性.填充和轮廓属性.应用于对象 ...
- ZBrush软件特性之Stencil模板调控板
在ZBrush中使用Stencil模板我们了解的所有绘图工具,通过它确定模板周围与涂画或模型的位置.本文将详解ZBrush®中如何使用“曲线板”自定义形状. 使用模版 ZBrush模版的作用象我们了解 ...
- css3背景渐变以及图片混合渲染模式(一)
一.CSS3 渐变(Gradients):CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必须使用图像来实现这些效果.但是,通过使用 CSS3 渐变(g ...