Java中使用递归算法实现子级架构的查询
场景
在实现企业架构管理时采用树形结构。如图:
现在要根据传递的id属性查询其有多少个子级架构。
注:如果A的id是B的pid,那么A就是B的父级。
实现
递归函数如下:
public void selectChild(List<Long> ids){//用来存取调用自身递归时的参数List<Long> temp= new ArrayList<Long>();//查询数据库中对应id的实体类List<SysEnterpriseOrg> sysEnterpriseOrgList = new ArrayList<SysEnterpriseOrg>();//遍历传递过来的参数idsfor (Long id :ids) {//查询子级架构//此处使用mybaatisPlus的条件构造器,查询pid等于id的对象QueryWrapper<SysEnterpriseOrg> sysEnterpriseOrgChildQueryWrapper = new QueryWrapper<SysEnterpriseOrg>();sysEnterpriseOrgChildQueryWrapper.eq("pid",id.toString());//查询结果返会一个listsysEnterpriseOrgList= sysEnterpriseOrgMapper.selectList(sysEnterpriseOrgChildQueryWrapper);//遍历list获取符合条件的对象的id值,一份存到temp中用作递归的参数,并存到全局变量中用来获取所有符合条件的idfor (SysEnterpriseOrg s:sysEnterpriseOrgList) {temp.add(s.getId());result.add(s.getId());}}if(temp.size()!=0&&temp!=null){selectChild(temp);}}
单元测试调用示例:
package com.ws.test.common;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ws.sys.entity.SysEnterpriseOrg;
import com.ws.sys.mapper.SysEnterpriseOrgMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import java.util.ArrayList;
import java.util.List;/*** Created by HAOHAO on 2019/6/18.*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
public class diguiTest {@Autowiredprivate SysEnterpriseOrgMapper sysEnterpriseOrgMapper;List<Long> result = new ArrayList<Long>();@Testpublic void test(){List<Long> canshu = new ArrayList<Long>();canshu.add(1l);selectChild(canshu);for (Long s :result) {System.out.print(s);}}public void selectChild(List<Long> ids){//用来存取调用自身递归时的参数List<Long> temp= new ArrayList<Long>();//查询数据库中对应id的实体类List<SysEnterpriseOrg> sysEnterpriseOrgList = new ArrayList<SysEnterpriseOrg>();//遍历传递过来的参数idsfor (Long id :ids) {//查询子级架构//此处使用mybaatisPlus的条件构造器,查询pid等于id的对象QueryWrapper<SysEnterpriseOrg> sysEnterpriseOrgChildQueryWrapper = new QueryWrapper<SysEnterpriseOrg>();sysEnterpriseOrgChildQueryWrapper.eq("pid",id.toString());//查询结果返会一个listsysEnterpriseOrgList= sysEnterpriseOrgMapper.selectList(sysEnterpriseOrgChildQueryWrapper);//遍历list获取符合条件的对象的id值,一份存到temp中用作递归的参数,并存到全局变量中用来获取所有符合条件的idfor (SysEnterpriseOrg s:sysEnterpriseOrgList) {temp.add(s.getId());result.add(s.getId());}}if(temp.size()!=0&&temp!=null){selectChild(temp);}}
}
Java中使用递归算法实现子级架构的查询相关推荐
- Java中使用递归算法实现查找树形结构中所有父级和子级节点
场景 在企业架构管理中使用树形结构进行管理,如图: 注:如果A的id是B的pid,那么A就是B的父级. 数据库数据如下: 现在需要根据传递的id查询此节点所有的父级节点以及此节点所有的子级节点. 实现 ...
- java递归获取所有的子级节点
public class VltavaWisdomMapType { //站点id private String id; //子级集合 private List< ...
- java中的递归算法_java递归算法实例分析
递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候,一 ...
- java中的递归算法_java中的递归算法
import java.math.BigDecimal; /** * 递归计算1+2+3+...+100 * * @author dell * */ public class Test { publi ...
- java中的递归算法_java递归实现
二话不说,先上代码 Java代码 publicclassTestRecursion{ //递归方法 publicstaticvoidfun(inti){ if(i >0){ i--; fun(i ...
- c#如何将多个json合并_合并两个c#对象(json)列表作为父级子级
我有一个看起来像下面的json字符串: [ { "id": 1, "title": "Hello" }, { "id": ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- java中实现多态的机制
多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...
- Java 中如何使用 SQL 查询文本
[摘要] 使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢 ...
最新文章
- QT的第一个程序HELLO WORLD
- IoC(Inversion of Control,控制反转)模式
- C++里如何使用功能键(F1、F2·····)进行操纵?
- 成功解决RuntimeError: Decompression ‘SNAPPY‘ not available. Options: [‘GZIP‘, ‘UNCOMPRESSED‘]
- python数据特征提取_训练数据的特征提取
- OpenCASCADE:构建线程
- Java Day 13
- 什么是SAP OData Model Creator
- jQuery中添加/改变/移除改变CSS样式例子
- HTML基础:web前端建站流程
- ListView的Item点击事件(消息传递)
- ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.12
- 服务器运维工程师岗位要求
- 策略篇--量化投资之双均线策略
- php开发地图导航,百度地图API使用方法详解
- __name__的基本用法
- 达芬奇机器人变身‘模仿达人’,通过看视频模仿手术缝合、穿针、打结等动作...
- java 猫 老鼠_Java面试题:猫吃老鼠问题
- 舵机控制 - 玛克君arduino
- vivado技巧总结
热门文章
- java 字节 字符,java:字节和字符
- JAVA订单的输入输出_Java的输入/输出操作
- 用户管理界面开源代码_商城系统开源代码对于企业有利还是有弊?
- 使用Thumbnails压缩或放大图片大小(java)
- python生成柱状图 不显示_python – Matplotlib图表不显示在PyCharm中
- vs2015 QT5.6 兼容xp系统
- rust领地柜保养物品放什么_门厅柜的样式,只有这四种
- python动态图片转字符画_GIF动态图,视频?都能用Python转换成字符画图像
- linux启动lsyncd服务,Ubuntu下lsyncd实现远端实时同步配置
- python运算符括号_Python合集之Python运算符(四)