1. 组织所有部门树,以及条件查询部门树:
  1. /**
  2. * 组织部门树
  3. * @return
  4. */
  5. @Override
  6. public List<SxyBranchVO> findAllBranchTree(String branchname) {
  7. SxyBranchVO sxyBranchVOParam = new SxyBranchVO();
  8. sxyBranchVOParam.setBranchcode("");
  9. sxyBranchVOParam.setDeleteflag("1");
  10. // 查询所有根节点root
  11. List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVOParam);
  12. if(StringUtils.isNotBlank(branchname)){ // 按部门名称查询,将符合条件的节点组织成结构树
  13. Set<SxyBranchVO> branchVOSet = new HashSet<>();
  14. Set<SxyBranchVO> branchVOSetSub = new HashSet<>();
  15. // 查询所有符合条件的子节点
  16. List<SxyBranchVO> sxyBranchVOS = sxyBranchMapper.getBranchsByName(branchname);
  17. for(SxyBranchVO sxyBranchVOSub : sxyBranchVOS){
  18. sxyBranchVOSub.setDeleteflag("1");
  19. branchVOSet.add(sxyBranchVOSub);
  20. // 向上递归,将符合条件的节点以及其所有上级父节点放在set集合中
  21. branchVOSetSub = buildTreeUp(sxyBranchVOSub,branchVOSetSub);
  22. for(SxyBranchVO sbv : branchVOSetSub){
  23. branchVOSet.add(sbv);
  24. }
  25. }
  26. // 组织结构树,将符合条件的所有节点组织进结构树
  27. List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
  28. for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
  29. // 组织结构树,根节点下的所有部门
  30. sxyBranchVO.setDeleteflag("1");
  31. buildTree(sxyBranchVO,branchVOSet);
  32. if(sxyBranchVO.getChildren() != null && sxyBranchVO.getChildren().size() > 0){
  33. sxyBranchVOListNew.add(sxyBranchVO);
  34. }
  35. }
  36. return sxyBranchVOListNew;
  37. }else{ // 查询所有,将所有节点组织成结构树
  38. for(SxyBranchVO sxyBranchVO : sxyBranchVOList){
  39. // 组织结构树,根节点下的所有部门
  40. sxyBranchVO.setDeleteflag("1");
  41. buildTreeAll(sxyBranchVO);
  42. }
  43. return sxyBranchVOList;
  44. }
  45. }
  46.  
  47. /**
  48. * 向上递归查询所有父节点(每一层的父节点只有一个)
  49. * @param sxyBranchVOSub
  50. * @param branchVOSetSub
  51. * @return
  52. */
  53. private Set<SxyBranchVO> buildTreeUp(SxyBranchVO sxyBranchVOSub, Set<SxyBranchVO> branchVOSetSub) {
  54. // 向上递归查询所有父节点
  55. SxyBranchVO sxyBranchVO = sxyBranchMapper.findParentBranchVOByParentCode(sxyBranchVOSub);
  56. if(sxyBranchVO != null){ // 如果不是根节点
  57. branchVOSetSub.add(sxyBranchVO);
  58. sxyBranchVO.setDeleteflag("1");
  59. buildTreeUp(sxyBranchVO,branchVOSetSub);
  60. }
  61. return branchVOSetSub;
  62. }
  63.  
  64. /**
  65. * 递归查询子节点(向下递归,组织符合条件的结构树)
  66. * @param sxyBranchVO
  67. */
  68. private void buildTree(SxyBranchVO sxyBranchVO,Set<SxyBranchVO> branchVOSet) {
  69. List<SxyBranchVO> sxyBranchVOListNew = new ArrayList<>();
  70. // 查询直属子节点
  71. List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
  72. for(SxyBranchVO sxyBranch : sxyBranchVOList){
  73. for(SxyBranchVO sbr : branchVOSet){
  74. if(sxyBranch.getBranchcode().equals(sbr.getBranchcode())){
  75. sxyBranchVOListNew.add(sxyBranch);
  76. }
  77. }
  78. }
  79. sxyBranchVO.setChildren(sxyBranchVOListNew);
  80. for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
  81. sxyBranchItem.setDeleteflag("1");
  82. buildTree(sxyBranchItem,branchVOSet);
  83. }
  84. }
  85.  
  86. /**
  87. * 递归查询子节点(向下递归,组织所有结构树)
  88. * @param sxyBranchVO
  89. */
  90. private void buildTreeAll(SxyBranchVO sxyBranchVO) {
  91. // 查询直属子节点
  92. List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
  93. sxyBranchVO.setChildren(sxyBranchVOList);
  94. for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
  95. sxyBranchItem.setDeleteflag("1");
  96. buildTreeAll(sxyBranchItem);
  97. }
  98. }
  1.  
  1.  

注释掉代码,供参考:

  1. /*private Boolean buildTreeMatch(SxyBranchVO sxyBranchVO,List<SxyBranchVO> sxyBranchVOS) {
  2. Boolean flag = false;
  3. // 查询直属子节点
  4. List<SxyBranchVO> sxyBranchVOList = sxyBranchMapper.findParentBranchVO(sxyBranchVO);
  5. for(SxyBranchVO sb : sxyBranchVOS){
  6. for(SxyBranchVO sbv : sxyBranchVOList){
  7. if(sb.getBranchcode().equals(sbv.getBranchcode())){
  8. return true;
  9. }
  10. }
  11. }
  12. if(!flag){
  13. sxyBranchVO.setChildren(sxyBranchVOList);
  14. for(SxyBranchVO sxyBranchItem : sxyBranchVOList){
  15. sxyBranchItem.setDeleteflag("1");
  16. buildTreeMatch(sxyBranchItem,sxyBranchVOS);
  17. }
  18. }
  19. return flag;
  20. }*/
  1.  

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. POJ 3764 DFS+trie树

    题意: 给你一棵树,求树中最长的xor路径.(n<=100000) 思路: 首先我们知道 A xor B =(A xor C) xor (B xor C) 我们可以随便选一个点DFS 顺便做出与 ...

  2. Hua Wei 机试题目二

    题目描述:假设1元,5元,10元,50元,100元的人民币若干,实现一个能找到最少张数累计达到一个指定金额方法.如:67元,可分为67个1元钱.也可分为6个10元7个1元,其中最少人民币分法为一张50 ...

  3. appium连接夜游神的方法

    很多小伙伴想连接夜游神模拟器,但是无法连接,下面是夜游神的链接方法 第一步:先打开夜游神模拟器 第二步:打开运行输入cmd,输入夜游神连接方法:adb connect 127.0.0.1:62001第 ...

  4. javascript中缓存

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. C#测量程序运行时间及cpu使用时间实例方法

    private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...

  6. RabbitMQ学习笔记(2)----RabbitMQ简单队列(Hello World)的使用

    1. 简单队列结构图 2. 引入依赖 pom.xml文件 <dependency> <groupId>com.rabbitmq</groupId> <arti ...

  7. ZBrush软件中Brush特性

    在ZBrush里给用户提供了上百种用于雕刻的笔刷,每种笔刷的显示模式是以红色的两个圆圈,外面的圆圈表示笔刷在进行绘制和雕刻实际影响的范围,而内圆是表示笔刷强度到外圆的衰减的起始位置,可以在Focal ...

  8. 2、Attentive Group Recommendation----注意力集中的群组推荐

    1.摘要: 采用attention和NCF结合解决群组偏好融合的问题. 贡献: 第一个使用神经网络学习融合策略的组推荐. 进一步整合用户-项目交互改进组推荐,减轻冷启动问题. 2.方法: 模型AGRE ...

  9. BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)

    明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...

  10. done