首页 > 编程语言 >java递归返回树形数据结构

java递归返回树形数据结构

时间:2023-09-06 09:58:31浏览次数:44  
标签:deptId java tree List dept 树形 treeNodeConfig treeNode 数据结构

近期项目有个需求,需要将组织机构数据拼成树型结构返回至前端。我的做法如下

方式一、使用递归方式实现

    private List<SysDept> getSysDepts(String deptId) {
        // 1、获取表中所有数据 (自行根据实际场景拿到所有表数据)
        List<SysDept> all = getAllDept();
        // 3、返回的结果集
        List<SysDept> tree = new ArrayList<>();
        // 4、获取到最外层的部门信息
        List<SysDept> parentSysDept = all.stream().filter(dept -> dept.getDeptId().equals(deptId)).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(parentSysDept)){
            // 5、取出部门信息
            SysDept dept = parentSysDept.get(0);
            // 6、放入集合中
            tree.add(dept);
            // 7、添加子节点
            addChildDept(dept, all);
        }
        return tree;
    }
    private void addChildDept(SysDept sysDept, List<SysDept> all) {
        // 1、拿到所传部门的字部门列表
        List<SysDept> tempList = all.stream()
                .filter(dept -> sysDept.getDeptId().equals(dept.getParentId()))
                .collect(Collectors.toList());
        sysDept.setChildren(tempList);
        tempList.forEach(dept -> {
            2、添加子节点
            addChildDept(dept, all);
        });
    }

效果展示:

 

方式二、利用Hutool工具进行实现

    private List<Tree<String>> getSysDepts(String deptId) {
        // 获取所有数据
        List<SysDept> all = getAllDept();
        //配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        // 自定义属性名 都要默认值的
        treeNodeConfig.setIdKey("deptId");
        // 最大递归深度
        treeNodeConfig.setDeep(4);

        //转换器 (这里参数的deptId,指的是最外层的deptId值)
        List<Tree<String>> treeNodes = TreeUtil.build(all, deptId, treeNodeConfig,
                (treeNode, tree) -> {
                    tree.setParentId(treeNode.getParentId());
                    // 扩展属性 ...(可以自行设置需要返回的字段)
                    tree.putExtra("deptId", treeNode.getDeptId());
                    tree.putExtra("status", treeNode.getStatus());
                });
        return treeNodes;
    }

效果展示:

 

标签:deptId,java,tree,List,dept,树形,treeNodeConfig,treeNode,数据结构
From: https://www.cnblogs.com/jiaodaoniujava/p/17681482.html

相关文章

  • 学java的第三天
       军训期间看了狂神说java,看了三天愣是没看到正题,才看到计算机语言发展史。不过也是有所收获的,今天学到了很多快捷键和简单的dos命令,写个博客记录一下。   快捷键:ctrl+c复制ctrl+v粘贴ctrl+a全选ctrl+x剪切ctrl+s保存alt+F4关闭窗口shfit+delete彻底删除......
  • Java的重大发展
    1990年,在sun计算机公司中,由PatrickNaughton、MikeSheridan以及JamesGosling领导的小组GreenTeam,开发出的新的编程语言,命名为Oak,后期命名为Java。1995年,Sun正式发布Java和HotJava产品,Java首次公开亮相1996年1月23日,发布JDK1.01998年,JDK1.2版本发布,同时Sun公司发布了JSP/Serv......
  • Java反序列化:CommonsCollections5调试分析
    基础知识1.BadAttributeValueExpException相关源码可以看到这个异常类的支持序列化和反序列化,同时在反序列化readObject函数中会涉及到toString函数publicclassBadAttributeValueExpExceptionextendsException{/*Serialversion*/privatestaticfinal......
  • Java实现常见排序算法
    Java实现常见排序算法排序也称排序算法(SortAlgorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分......
  • [Javascript] Write Observable
    functionObservable(forEach){this._forEach=forEach;}Observable.prototype={forEach:function(onNext,onError,onCompleted){if(typeofonNext==="function"){returnthis._forEach({onNext,onError:onEr......
  • Java中的多态
    多态使用注意事项(1) (2)通俗一点,就是重写后的优先级更高,记住这点就好。默认状态下还是父亲优先 (3) (4)类型强制转换操作ps.Dog和Cat继承于Animal 1 //Animala=newDog();  1Animala=newCat(); ainstanceofDog方法用于判断a是否是Dog类型(ps.Dog是个类)----如果......
  • 数据结构代码题-链表
    链表单链表单链表结构体的声明:typedefstructLink{ intdata;//代表数据域 structLink*next;//代表指针域,指向直接后继元素}link;//link为节点名,每个结点都是一个link结构体另一种:typedefstructLNode{ElemTypedata;structLNode*next;}LNode,*Link......
  • 《Java编程思想第四版》学习笔记23
    在Inning中,可以看到无论构建器还是event()方法都指出自己会“掷”出一个违例,但它们实际上没有那样做。这是合法的,因为它允许我们强迫用户捕获可能在覆盖过的event()版本里添加的任何违例。同样的道理也适用于abstract方法,就象在atBat()里展示的那样。“interfaceStorm”非......
  • 无涯教程-JavaScript - DAYS360函数
    描述DAYS360函数返回基于360天的年份(十二个月为30天)的两个日期之间的天数,该天数用于会计计算。语法DAYS360(start_date,end_date,[method])争论Argument描述Required/OptionalStart_dateThetwodatesbetweenwhichyouwanttoknowthenumberofdays.Requir......
  • Java语言与其环境:常见问题解答
    Java语言与其环境:常见问题解答在本博客文章中,将深入探讨Java编程语言的特点和环境,解释一些常见的关于Java的疑问。Java语言的特点是什么?Java是一种高级编程语言,它具有以下几个主要的特点:简单:Java的语法与C和C++非常相似,但它消除了这两种语言中的许多复杂和很少使用的特性,如......