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,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...
随机推荐
- POJ 3764 DFS+trie树
题意: 给你一棵树,求树中最长的xor路径.(n<=100000) 思路: 首先我们知道 A xor B =(A xor C) xor (B xor C) 我们可以随便选一个点DFS 顺便做出与 ...
- Hua Wei 机试题目二
题目描述:假设1元,5元,10元,50元,100元的人民币若干,实现一个能找到最少张数累计达到一个指定金额方法.如:67元,可分为67个1元钱.也可分为6个10元7个1元,其中最少人民币分法为一张50 ...
- appium连接夜游神的方法
很多小伙伴想连接夜游神模拟器,但是无法连接,下面是夜游神的链接方法 第一步:先打开夜游神模拟器 第二步:打开运行输入cmd,输入夜游神连接方法:adb connect 127.0.0.1:62001第 ...
- javascript中缓存
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#测量程序运行时间及cpu使用时间实例方法
private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...
- RabbitMQ学习笔记(2)----RabbitMQ简单队列(Hello World)的使用
1. 简单队列结构图 2. 引入依赖 pom.xml文件 <dependency> <groupId>com.rabbitmq</groupId> <arti ...
- ZBrush软件中Brush特性
在ZBrush里给用户提供了上百种用于雕刻的笔刷,每种笔刷的显示模式是以红色的两个圆圈,外面的圆圈表示笔刷在进行绘制和雕刻实际影响的范围,而内圆是表示笔刷强度到外圆的衰减的起始位置,可以在Focal ...
- 2、Attentive Group Recommendation----注意力集中的群组推荐
1.摘要: 采用attention和NCF结合解决群组偏好融合的问题. 贡献: 第一个使用神经网络学习融合策略的组推荐. 进一步整合用户-项目交互改进组推荐,减轻冷启动问题. 2.方法: 模型AGRE ...
- BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)
明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...
- done