组织所有部门树,以及条件查询部门树:
    /**
* 组织部门树
* @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代码递归部门结构树的更多相关文章

  1. OA系统部门结构树

    public class DepartmentUtils { /** * @param topList 顶级部门列表 * @param removeId 删除部门的id * @return */ pu ...

  2. JAVA代码实现多级树结构封装对象

    树结构在开发中经常遇到.例如:部门.菜单.员工架构等等.下面用部门作为例子构造部门结构树 1.部门表:dept -- ---------------------------- -- Table str ...

  3. 数据结构笔记--二叉查找树概述以及java代码实现

    一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...

  4. 希尔排序及希尔排序java代码

    原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...

  5. 四种java代码静态检查工具

    [转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043       1月16日厦门 OSC ...

  6. 常见的排序算法之Java代码解释

    一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...

  7. java 中递归的实现 以及利用递归方法实现汉诺塔

    今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...

  8. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  9. Java代码编写的一般性指导

    (1) 命名规则:这个最基本,也最重要,请牢记. 1,类名首字母应该大写. 2,字段.方法以及对象(句柄)的首字母应小写. 3,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...

随机推荐

  1. Noip前紧急抢救

    管他会不会,知道结论就好了 紧急抢救知识 斯特林数 第一类斯特林数 递推公式 \[ S[n][k]=(n-1)\times S[n-1][k]+S[n-1][k-1] \] 处理的问题是将n个数划分为 ...

  2. Java 系列之Filter(一)

    一.过滤器 过滤器就是在源数据和目的数据之间起过滤作用的中间组件.它可以截取客户端和资源之间的请求和响应信息,并且对这些信息进行过滤. 二.应用场景 1.对用户请求进行统一认证 2.对用户的访问请求进 ...

  3. Chrome 开发工具系列

  4. 五年磨一剑:Java 开源博客 Solo 1.0.0 发布了!

    从 Solo 第一个版本发布至今,已经过去 5 年了.今天我们非常自豪地宣布,Solo 1.0.0 正式发布,感谢一直以来关注 B3log 开源的朋友! 目前 B3log 开源有三款产品: GitHu ...

  5. GreenDao 3.X之基本使用

    在GreenDao 3.X之注解已经了解到GreenDao 3.0的改动及注解.对于数据库的操作,无异于增删改查等四个操作.下面我们将了解GreenDao 3.X如何使用? AbstractDao 所 ...

  6. 「JavaSE 重新出发」05.03.02 在运行时使用反射分析对象

    在编写程序时,如果知道想要查看的域名和类型,查看指定的域是一个很容易的事,而利用反射机制可以查看在编译时还不清楚的对象域. java Employee tank = new Employee(&quo ...

  7. Thingworx SDK开发自定义Widget

    Thingworx自带的图表数量有限,样式也很有限,在echarts上看到了这样一个非常简单的图表,下面将做一个简单的静态引入示范 首先创建Thingworx项目 然后右键ui新建widget 自动生 ...

  8. ABBYY简体中文版终身授权半价来袭,真的是5折!

    经过了一个春秋,心心念念的双十一终于要来了,一年时间并不长,但这一个月尤其慢!ABBYY官方称为回馈广大用户的支持与厚爱,双十一期间,ABBYY价格感人,诱惑难挡. 说到双十一活动,方式也是五花八门, ...

  9. 边框的使用,border-radius,box-shadow,border-image

    <html>    <head>        <meta charset="UTF-8">        <title></ ...

  10. 路飞学城Python-Day32【小结】

    import socket from multiprocessing import Process def talk(conn): while True: try: data = conn.recv( ...