用递归写的一个简单树结构

Java递归实现树结构遍历展示以及条件筛选 阅读详情

//**

*实体列

*/

public class Nodes {

    private int id;//主键ID
    private String parentId;//父节点ID
    private String hrefAddress;//存放路径
    private String nodeName;//节点名称

    private List<Nodes> children=new ArrayList<Nodes>();//子节点集合

    //此处省略get和set方法......

}


//**

 *获取树结构数据

*/

@RequestMapping(value="/main")

public  ModelAndView getList(){

      ModelAndView mv = this.getModelAndView();

      List<Nodes> list=menuService.getAllMenu();//去数据库获取所有Menu数据

      List<Nodes> menuList=analysisList(list);

      JSONArray arr = JSONArray.fromObject(menuList);
       String json = arr.toString();

     //json =json.replaceAll("nodeName", "name").replaceAll("hrefAddress","url");如果所用到的tree插件需要替换的话可以用这个

     mv.setViewName("main");

     mv.addObject("zTreeNodes", json);

      return mv;

}


//**
     * 组装数据
     * @param list  所有菜单集合
     * @return
     */
    private List<Nodes> analysisList(List<Nodes> list){
        List<Nodes> newList=null;
        if(list!=null&&!list.isEmpty()){
            newList=new ArrayList<Nodes>();
            for (Nodes testEntity : list) {  
                if (testEntity.getParentId().equals("1")) {//父级菜单开始添加  
                    if (ifChilds(list, testEntity.getId())) {//存在子集  
                         List<Nodes> childs = new ArrayList<Nodes>();  
                         childs = getChildList(list,testEntity.getId(),childs);  
                         testEntity.getChildren().addAll(childs);  
                    }  
                    newList.add(testEntity);  
                }  
            }  
        }else{
            newList=list;
        }
        return newList;
    }
    
     //获取父id下的子集合  
    private List<Nodes> getChildList(List<Nodes> list,int pId,List<Nodes> childs) {  
        for (Nodes testEntity : list) {  
            if (testEntity.getParentId().equals(String.valueOf(pId))) {//查询下级菜单  
                if (ifChilds(list, testEntity.getId())) {  
                    List<Nodes> newChilds = new ArrayList<Nodes>();  
                    newChilds = getChildList(list,testEntity.getId(),newChilds);  
                    testEntity.getChildren().addAll(newChilds);
                }  
                childs.add(testEntity);  
            }  
        }  
        return childs;  
    }  
      
    //判断是否存在子集  
    private  boolean ifChilds(List<Nodes> list,int pId) {  
        boolean flag = false;  
        for (Nodes testEntity : list) {  
            if (testEntity.getParentId().equals(String.valueOf(pId))) {  
                flag=true;  
                break;  
            }  
        }  
        return flag;  
    } 


//jsp页面 关键代码,这里用到是是ztree插件

<div>
        <ul id="tree" ></ul>
</div>

<script type="text/javascript">
    var zTree;
    $(function(){
            var setting = {
                showLine: true,
                checkable: true
            };
            var zn = '${zTreeNodes}';
            var zTreeNodes = eval(zn);
            zTree = $("#tree").zTree(setting, zTreeNodes);
        });
    </script>


递归查找——通过某个属性从树结构中获取对象 假定现有树结构:const personArr = [ { id: "001", name: "maimang", children: [ { id: "002", name: "Tom", headImg: "https://avatars1.githubusercontent.com/u/24405319?... 阅读详情

相关推荐

⭐⭐⭐全网最详细YOLOv8教程,从环境配置到自己训练,再到数据集的制作,包的各位⭐⭐⭐

问题原因:当你“pip install ultralytics” 时,torch和torchvision会作为它的依赖一起安装了,当执行“pip install torch torchvision torchaudio --index-url。”时,会卸载torch,然后再安装torch+cuda版本,但是不会自动卸载torchvision已有版本,然后再安装torchvision+cuda版本。🎉🎉🎉恭喜各位道友,已经可以训练模型了,现在就是制作自己的数据集,所谓申神通秘境,随心所欲,万物皆可识别也

weixin_74840239的博客 7492

通过递归构造树

使用 Stream 流的 filter() 方法来筛选根节点和子节点,并使用 peek() 方法将节点添加到相应的列表中。在 addChildren() 方法中,我们使用 Stream 流的 filter() 方法筛选出每个父节点的子节点,并将它们添加到父节点的 children 列表中。然后,再递归地调用 addChildren() 方法,以添加每个子节点的子节点,直到所有节点被处理完毕。递归出口:可以想到,当子节点下再找不到下一级的子节点了,那么这个root节点下的递归构造就完成了,便可回溯。

qq_1763467007的博客 1667

安卓逆向实战:用Batch Apktool 3.8.0快速汉化APK的完整流程

本文详细解析了如何使用Batch Apktool 3.8.0进行安卓APK汉化的完整流程,包括环境配置、反编译、资源解析、深度汉化、重构建与签名优化等关键步骤。通过这款集成化逆向工具,开发者可以高效完成APK汉化,提升工作效率。

s1t2u3的博客 1098

Java递归构建树形结构

​ 本文介绍Java后台构建树形结构数据的设计思路及实现,在设计过程中,仍然存在许多未能充分理解的位置,若存在错误或更好实现方案,可分享/指出,共同学习进步。

qq_43842093的博客 4645

简易电梯控制系统设计(两层楼)(

(电子科技大学 数字系统实验二 结课验收项目 ) 题目要求:

m0_48801027的博客 1万+

从TI官方手册里挖细节:TPS5430负压电路那个不起眼却救命的Cd电容

本文深入解析TPS5430负压电路中关键Cd电容的作用与设计要点,揭示其在DC-DC电源设计中的重要性。通过对比TI手册和实战案例,详细阐述Cd电容在高频电流回路、能量缓冲和噪声抑制中的核心功能,并提供选型与布局指南,帮助工程师避免芯片烧毁风险,提升电路稳定性。

weixin_27102543的博客 357

Java递归实现树形结构的两种方式

Java递归实现树形结构的两种常见方式。

一宿君 1万+

Allegro如何把分离的线段变成封闭连续的图形

Allegeo支持把分离的线段变成封闭连续的图形,以下图为例,线段是分离的。Allegro如何把分离的线段变成封闭连续的图形。Find选择other segs 和Lines。Find选择other segs 和Lines。选择shape-compose shape。分离线段已经是连续封闭的shape形式了。框选图形,删除剩下的无用的分离线段。Find选择shapes。鼠标右击选择done。选择delete命令。鼠标右击选择done。

weixin_54787054的博客 6239

树形结构递归构建(TreeNode通用设计)

TreeNode 通用设计

EDG_win的博客 1585

8 卡 GPU 服务器与 NVLink/NVSwitch 互联技术

NVLink 是一种点对点的高速互连技术,单条 NVLink 就是一条全双工双路信道,每条 NVLink 链路可以将 2 个 GPU 直连起来,并且每个 GPU 可以提供多条 NVLink 接口连接多个 GPU。另外,PCIe Switch 互联拓扑中的 GPU 之间可能存在 GPU0→Switch0→CPU0→CPU1→Switch1→GPU7 的通信链路,它的通信不可避免的存在一定的延迟,因而更适合用于对信号效率不敏感且追求性价比的使用场景,如:推理、云计算等领域。本文讨论的是单机 GPU 卡间互联。

烟云的计算 4262

黑猫带你学eMMC协议第14篇:eMMC FFU详解(Field Firmware Update)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、ffu相关寄存器有哪些? 2、如何设置ffu? 3、什么是ffu?是否能够更新旧版本的固件到emmc? 4、ffu配置流程图。 2 什么是FFU 主机下载新的固件到eMMC,下载成功后eMMC将固件安装到设备。 3 相关寄存器/命令 SUPPORTED_MODES [493] FFU_FEATURES [492] 该

黑猫奥利奥的博客 4657

VUE递归组件实现一个简单的树形结构

关于什么情况下使用以及里面使用的部分原理在本文就不做说明了,现在介绍的只是简单的一种实现的方式; 先看下实现的效果: 简单介绍下这个组件的功能: 1. 显示是否存在下级菜单的左侧按钮提示 2. 展开的时候的左侧按钮的展示状态的改变 3. 选中的时候文字的颜色的变化 4. 点击文字选中的时候会返回当前的这个位置的内容(可根据自己需求进行修改) 先看下父组件的代码: &l...

不忘初心,方得始终! 4187

使用Simulink对氢燃料电池与锂电池的混合储能系统进行建模

本文介绍了基于Simulink的氢燃料电池与锂电池混合储能系统建模与协同控制方法。系统通过氢燃料电池提供稳定能源,锂电池实现快速响应,结合DC-DC变换器和负载管理器实现动态调控。详细阐述了从模型创建、关键模块配置到控制器设计的完整流程,重点说明了功率分配算法和充放电控制策略的实现。通过仿真分析验证了系统在不同负载条件下的性能表现,包括响应速度、工作效率和稳定性等指标。该方案为新能源混合储能系统的设计与优化提供了实用指导,有助于提升系统可靠性和延长电池寿命。

amy_mhd的博客 314

javascript如何用递归写一个简单的树形结构示例

Linux编程点击右侧关注,免费入门到精通!作者:攻城狮Lee丶 https://blog.youkuaiyun.com/zhuoganliwanjin/article/detail...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 221

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java - poi递归导出树结构Excel,导入树结构Excel,树结构递归查询,新增,修改,删除

文章目录一、表结构设计,导入导出模板。二、递归查询树结构1.思路如下2.代码示例二、新增树结构思路如下三.树结构修改。思路如下四、递归删除树结构1.思路如下2.代码示例五、树结构递归导出Excel1.思路如下2.代码示例六、导入树结构Excel1.思路如下2.代码示例吹牛逼结束,感谢观看 一、表结构设计,导入导出模板。 注: 博主树结构为8级结构,因业务关系,故分为两张表。此表分为4级结构如下: 楼栋 — 单元 — 楼层 — 房间 Excel表格项目名字段从第一张表获取,忽略即可。 表仅截取几个树结

kai641596729的博客 5507

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java递归实现树结构(包含Java 8 方法)

递归实现树结构数据 一、递归概念:自己的理解,自己调用自己,何为自己钓鱼呢自己,比如 下面的**chilMenus.add(buildChilTree(menuNode))**就是在自己调用自己,查询到下一级的下一级,有几级我就调用几次我自己,从而实现树状结构中的父节点下的所有子级。 //递归,建立子树形结构 public Menu buildChilTree(Menu pNode){ List<Menu> chilMenus =new ArrayList<Menu>();

Blooming death的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JS递归遍历树结构

JS递归遍历树结构上代码 上代码 // 树结构 const options = [ { value: 'zhejiang', label: 'Zhejiang', children: [ { value: 'hangzhou', label: 'Hangzhou', children: [ ...

weixin_44953227的博客 7943

递归实现树结构封装

这里写自定义目录标题简介代码实现 简介 作为一名两年的程序猿,每每需要用到递归的都要头疼一番,所以今天就再这里写一个案例,记录一下自己递归实现树结构的封装. 代码实现 1.DataSourceTreeDomain.java用于返回给页面展示 @Data public class DataSourceTreeDomain { @ApiModelProperty(value = "ID") private Long id; @ApiModelProperty(value = "元数据

qq_43419105的博客 593

RAPTOR:树结构的索引和检索系统的递归抽象处理

RAPTOR:树结构的索引和检索系统的递归抽象处理

安静的软件工程师 1961

java递归实现树结构封装

1.新建树结构表 2.生成树实体对象 3.递归实现树结构封装 package com.jd.org.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jd.org.entity.TreeNode; import com.jd.org.mapper.TreeNodeMapper; import com.jd.org.service.Tr

萌新比克o的博客 765

monodb树结构的设计和递归

这段时间博主在做一个项目,是父子关系相互引用并且可以重复,与往常的树结构不同, 它除了可以一对多之外,他们自己可以成为自己的父亲,并且子可以重复多个,要指明父子关系,经过斟酌考虑后,博主采用了这种接口 假设有一个需求,每一个任务都有自己的任务关联组: 现在有三个任务,A,B,C,他们之前相互关联,现在从A开始关联,也就是说可以这样; A-A-A-B-B-B-C-C-C 一个很荒谬的需求,这种情况从...

Nodejs 1836

Java 树结构的构造及树中数据自下向上的汇总(递归和非递归实现)

Java 树结构的构造以及对树结构中的数据进行自下向上的汇总, 提供了递归和非递归两种实现方式供大家参考.

Waruler的博客 5606

递归的理解以及递归算法遍历目录结构和树结构

1. 使用递归算法遍历目录结构和树结构 (1) 什么是递归算法? 在数学与计算机科学中,递归时指在函数的定义中使用函数自身的方法。 一般来说,递归都是很多算法的灵魂,所以我会举一些例子来说明什么是递归算法。 首先如果你有一个盒子A,A里面有许多盒子,盒子里可能又有盒子,有一把钥匙,在这些盒子中任意一个里,你要去找到这把钥匙,这时候你需要采用什么方法才能更快找到钥匙? 一般来说都会打开A并且一个个翻...

weixin_43349577的博客 1065

Java实现树结构数据的递归与非递归遍历

递归与非递归的遍历 递归在很多情况下我们都会使用,比如著名的汉诺塔问题,有时候我们遍历一棵树形数据结构的数据也会需要用到递归,但是并不是绝对。原因是:以递归遍历一棵树型结构的数据为例,当这个树足够深的时候,会以深度遍历沿着一条支路走到底,然后再回来执行下一条支路。这种情况下在调用本身方法之后,剩下的未执行代码就会被存起来(存到哪里呢?是堆中吗?知道的可以告诉我一下哈。)以便当执行回来的时候继续向

gemuandyou的专栏 7992

使用递归方法拼接分类树结构(二)

使用递归方法拼接分类树结构 上一个递归方法讲的是使用递归方法查询所有分类下的文档,这种方式查出来的结果是一个列表,不便于区分层级关系。今天来讲一个树结构的拼接方法,也就是通过父id查询子类,将子类的结果集拼接到父类下面,再查子类的子类,无限的查下去,查到null为止,拼接起来的结果,像一颗树的结构一样有粗有细有分支,哈哈~ 一、逻辑分析 以创建分类的树结构为例,所有的类型,都有自己的id和superid(父id),我们只要根据superid查询它下面有没有子类id,如果有,再将子类的id作为新的superi

DDDHL7的博客 1006
上一篇: List集合合并指定数据
下一篇: 兼容各大浏览器的JavaScript阻止事件冒泡代码
闲云9134
博客等级 码龄10年 12粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值