场景

在实现企业架构管理时采用树形结构。如图:

现在要根据传递的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中使用递归算法实现子级架构的查询相关推荐

  1. Java中使用递归算法实现查找树形结构中所有父级和子级节点

    场景 在企业架构管理中使用树形结构进行管理,如图: 注:如果A的id是B的pid,那么A就是B的父级. 数据库数据如下: 现在需要根据传递的id查询此节点所有的父级节点以及此节点所有的子级节点. 实现 ...

  2. java递归获取所有的子级节点

    public class VltavaWisdomMapType {     //站点id     private String id;       //子级集合   private List< ...

  3. java中的递归算法_java递归算法实例分析

    递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候,一 ...

  4. java中的递归算法_java中的递归算法

    import java.math.BigDecimal; /** * 递归计算1+2+3+...+100 * * @author dell * */ public class Test { publi ...

  5. java中的递归算法_java递归实现

    二话不说,先上代码 Java代码 publicclassTestRecursion{ //递归方法 publicstaticvoidfun(inti){ if(i >0){ i--; fun(i ...

  6. c#如何将多个json合并_合并两个c#对象(json)列表作为父级子级

    我有一个看起来像下面的json字符串: [ { "id": 1, "title": "Hello" }, { "id": ...

  7. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  8. java中实现多态的机制

    多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...

  9. Java 中如何使用 SQL 查询文本

    [摘要]         使用 SQL 查询语言,你只能查询位于数据库里面的数据,但是当你面对的数据是一些 Excel 表格或者 Txt 文本格式时,有什么办法能直接对着文件进行 Select 查询呢 ...

最新文章

  1. QT的第一个程序HELLO WORLD
  2. IoC(Inversion of Control,控制反转)模式
  3. C++里如何使用功能键(F1、F2·····)进行操纵?
  4. 成功解决RuntimeError: Decompression ‘SNAPPY‘ not available.  Options: [‘GZIP‘, ‘UNCOMPRESSED‘]
  5. python数据特征提取_训练数据的特征提取
  6. OpenCASCADE:构建线程
  7. Java Day 13
  8. 什么是SAP OData Model Creator
  9. jQuery中添加/改变/移除改变CSS样式例子
  10. HTML基础:web前端建站流程
  11. ListView的Item点击事件(消息传递)
  12. ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.12
  13. 服务器运维工程师岗位要求
  14. 策略篇--量化投资之双均线策略
  15. php开发地图导航,百度地图API使用方法详解
  16. __name__的基本用法
  17. 达芬奇机器人变身‘模仿达人’,通过看视频模仿手术缝合、穿针、打结等动作...
  18. java 猫 老鼠_Java面试题:猫吃老鼠问题
  19. 舵机控制 - 玛克君arduino
  20. vivado技巧总结

热门文章

  1. java 字节 字符,java:字节和字符
  2. JAVA订单的输入输出_Java的输入/输出操作
  3. 用户管理界面开源代码_商城系统开源代码对于企业有利还是有弊?
  4. 使用Thumbnails压缩或放大图片大小(java)
  5. python生成柱状图 不显示_python – Matplotlib图表不显示在PyCharm中
  6. vs2015 QT5.6 兼容xp系统
  7. rust领地柜保养物品放什么_门厅柜的样式,只有这四种
  8. python动态图片转字符画_GIF动态图,视频?都能用Python转换成字符画图像
  9. linux启动lsyncd服务,Ubuntu下lsyncd实现远端实时同步配置
  10. python运算符括号_Python合集之Python运算符(四)