树状结构数据,筛选指定数据

news2024/9/28 23:34:58

问题描述:
应用场景和需求:对一个树状结构的数据,进行CRUD 时,想筛选出 树状结构数据中存在变动的部分。
树状结构图片

操作步骤

准备需要的数据:
1.先拿到 你原来的树状结构数据
2.再筛选出 需要保留的数据集合id,也就是对应的CRUD数据id

/**
     * 树形筛选查找
     * @param treeDtoList 树形集合
     * @param idList 筛选条件(可以是其他条件)
     * @return 包含的节点数据
     */
    public static List<DocumentCatalogue> screenTree(List<DocumentCatalogue> treeDtoList, List<String> idList){
        //最后返回的筛选完成的集合
        List<DocumentCatalogue> screeningOfCompleteList = new ArrayList<>();
        if (treeDtoList.size()>0 && idList.size()>0 ){
            for (DocumentCatalogue DocumentCatalogue : treeDtoList){
            	//获取子集 数据
                List<DocumentCatalogue> subsetList = DocumentCatalogue.getChildren();
                //递归筛选完成后的返回的需要添加的数据
                DocumentCatalogue addTreeDto = getSubsetPmsPlanPo(DocumentCatalogue,subsetList,idList);
                //如果筛选完的数据 不为空则添加到 返回的集合中
                if (addTreeDto!=null){
                    screeningOfCompleteList.add(addTreeDto);
                }
            }
            return screeningOfCompleteList;
        }
        return null;
    }

递归筛选

 /**
     * 筛选符合的集合并返回
     * @param DocumentCatalogue 树形类
     * @param subsetTreeDtoList 子集集合
     * @param idList 筛选条件
     * @return 筛选成功的类
     */
    public static DocumentCatalogue getSubsetPmsPlanPo(DocumentCatalogue DocumentCatalogue,List<DocumentCatalogue> subsetTreeDtoList,List<String> idList){
        //作为筛选条件的判断值,也就是拿到 当前子集的id
        String id = DocumentCatalogue.getId();
        //判断当前 树状结构是否还存在子集,如果存在则继续向下递归查找
        if (subsetTreeDtoList.size()>0 ){
            List<DocumentCatalogue> addTreeDtoList = new ArrayList<>();
            for (DocumentCatalogue subsetTreeDto : subsetTreeDtoList){
            	//拿到子集
                List<DocumentCatalogue> subsetList = subsetTreeDto.getChildren();
                //继续向下向下递归查找
                DocumentCatalogue newTreeDto = getSubsetPmsPlanPo(subsetTreeDto,subsetList,idList);
                //当子集筛选完不为空时添加
                if (newTreeDto!=null){
                    addTreeDtoList.add(newTreeDto);
                }
            }
            //子集满足条件筛选时集合不为空时,替换对象集合内容并返回当前对象
            if (addTreeDtoList.size()>0){
                DocumentCatalogue.setChildren(addTreeDtoList);
                return DocumentCatalogue;
                //当前对象子集对象不满足条件时,判断当前对象自己是否满足筛选条件,满足设置子集集合为空,并返回当前对象
            }else if (addTreeDtoList.size()>0&& idList.contains(id)){
                DocumentCatalogue.setChildren(null);
                return DocumentCatalogue;
            }else {
                //未满足筛选条件直接返回空数据
                return null;
            }
        }else {
            //不存在子集时判断当前对象是否满足筛选条件,也就是是否满足有CRUD操作的数据
            if (idList.contains(id)){
                return DocumentCatalogue;
            }else {
                return null;
            }
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/853173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习基础之《特征工程(4)—特征降维》

一、什么是特征降维 降维是指在某些限定条件下&#xff0c;降低随机变量&#xff08;特征&#xff09;个数&#xff0c;得到一组“不相关”主变量的过程 1、降维 降低维度 ndarry 维数&#xff1a;嵌套的层数 0维&#xff1a;标量&#xff0c;具体的数0 1 2 3... …

用了回不去的卷王机械键盘,看这些就够了

前几天出了一期不同价位鼠标推荐&#xff1a;外设圈彻底开卷&#xff0c;2023 下半年无脑入鼠标推荐表来了&#xff01; 结果不少小伙伴儿留言&#xff0c;鼠标是有了&#xff0c;还缺一把趁手好用且高性价比的机械键盘&#xff0c;并强烈要求咱再出一期。 话不多说&#xff0…

Markdown格式说明

一、基本语法 1.1 标题 大标题 中标题 -----# 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 1.2 文本样式 *强调文本* _强调文本_**加粗文本** __加粗文本__标记文本~~删除文本~~> 引用文本H~2~O is是液体。2^10^ 运算结果是 1024。…

使用Python发送HTML格式的邮件

使用Python发送HTML格式的邮件 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1f604; …

业务中如何过滤敏感词

在我们访问网站的时候&#xff0c;如果发现我们发布的内容有色情暴力的东西等等&#xff0c;会屏蔽掉&#xff0c;这种行为就是过滤敏感词。 从技术层面实现起来&#xff0c;其实比较简单&#xff0c;因为我们输入的内容就是一个大型的字符串&#xff0c;我们要调用某些api来判…

【Vue3】Teleport 传送组件

Teleport 组件是 Vue.js 3 中引入的特性之一&#xff0c;它允许将组件的内容传送&#xff08;teleport&#xff09;到当前组件之外的目标位置&#xff0c;这在处理复杂的布局、模态框等方案时非常有用。 A.vue <template><div class"dialog"><heade…

SQL server 异地备份数据库

异地备份数据库 1.备份服务器中设置共享文件夹 2.源服务器数据库中添加异地备份代理作业 EXEC sp_configure show advanced options, 1;RECONFIGURE; EXEC sp_configure xp_cmdshell, 1;RECONFIGURE; declare machine nvarchar(50) 192.168.11.10 --服务器IP declare pa…

设备固定资产管理系统

资产管理是企业经营和发展的基础&#xff0c;特别是设备资产管理。适当的设备资产管理可以有效地提升企业的经营效率&#xff0c;为提高核心竞争能力提供高效的前提。 固资及设备管理系统&#xff08;EAM&#xff09;它是一种有效的固定资产管理模式&#xff0c;可以帮助企业更…

分布式应用:Zabbix 自动发现与自动注册

目录 一、理论 1.Zabbix 自动发现 2.Zabbix 自动发现部署 3.Zabbix 自动注册 4.Zabbix 自动注册部署 二、实验 1.Zabbix 自动发现部署 2.Zabbix 自动注册部署 三、总结 一、理论 1.Zabbix 自动发现 &#xff08;1&#xff09;原理 zabbix 自动发现(对于 agent2 是被…

爱校对-校对软件的重要性:减少错别字和语法错误的尴尬

校对软件在减少错别字和语法错误方面发挥着重要的作用&#xff0c;帮助避免尴尬情况的发生。以下是校对软件的重要性所在&#xff1a; 1.提高专业形象&#xff1a;新闻稿件是传递信息和建立声誉的关键工具。若存在大量的错别字和语法错误&#xff0c;会严重影响读者对媒体机构或…

探究使用HTTP代理ip后无法访问网站的原因与解决方案

目录 访问网站的原理是什么 1. DNS解析 2. 建立TCP连接 3. 发送HTTP请求&#xff1a; 4. 服务器响应&#xff1a; 5. 浏览器渲染&#xff1a; 6. 页面展示&#xff1a; 使用代理IP后访问不了网站&#xff0c;有哪些方面的原因 1. 代理IP的可用性&#xff1a; 2. 代理…

webshell免杀项目-ByPassGodzilla(一)

哥斯拉WebShell免杀生成工具 项目地址&#xff1a; https://github.com/Tas9er/ByPassGodzilla ㊙️友情提示 如果您的网站被恶意插入此后门&#xff0c;说明了两个问题&#xff1a; 1.你的站被日麻了 2.我对您的Diao站没有任何兴趣&#xff0c;只是有的Diao毛用工具不改密…

用条件格式美化图表,同事赞叹你的高超技巧

在工作中&#xff0c;我们经常需要制作图表来展示数据和趋势&#xff0c;但普通的图表可能显得平淡无奇。然而&#xff0c;通过巧妙运用条件格式&#xff0c;我们可以为图表增添美感和可读性&#xff0c;让同事们对你的技巧赞叹不已。本文将为您介绍如何利用条件格式来美化图表…

使用ResponseBodyAdvice做分页处理

目录 父pom文件 pom文件 配置文件 MyResponseBodyAdvice ResponseDto MyBatisConfig UsersController UsersMapper UserMapper.xml 结果 父pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

【JAVA】七大排序算法(图解)

稳定性&#xff1a; 待排序的序列中若存在值相同的元素&#xff0c;经过排序之后&#xff0c;相等元素的先后顺序不发生改变&#xff0c;称为排序的稳定性。 思维导图&#xff1a; &#xff08;排序名称后面蓝色字体为时间复杂度和稳定性&#xff09; 1.直接插入排序 核心思…

E1. PermuTree (easy version) Codeforces Round 890 (Div. 2) E1

题目大意&#xff1a; 给出一个n个点的树&#xff0c;所有点权a[i]构成一个n的排列&#xff0c;点权可以任意分配给点&#xff0c;问最多有多少对u,v满足a[u]<lca(a[u],a[v])<a[v] 2<n<5000 思路&#xff1a;首先&#xff0c;如果两个点的lca是他俩其中之一&…

Elasticsearch之kibana相关命令

1.中文分词器相关命令 2.拼音分词器相关命令

vuejs 设计与实现 - 双端diff算法

我们介绍了简单 Diff 算法的实现原理。简单 Diff 算法利用虚拟节点的 key 属性&#xff0c;尽可能地复用 DOM元素&#xff0c;并通过移动 DOM的方式来完成更新&#xff0c;从而减少不断地创建和销毁 DOM 元素带来的性能开销。但是&#xff0c;简单 Diff 算法仍然存在很多缺陷&a…

设备使用RTMP推流到安防监控EasyCVR视频汇聚平台,为何只有FLV格式无法播放?

TSINGSEE青犀视频安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等功能。 智能视频监控平台EasyCVR可…

镭速-解析极速文件传输软件

每天都要传输文件&#xff0c;让人心烦意乱&#xff0c;如果有一种最快的文件传输软件&#xff0c;就能节约很多时间&#xff0c;那么针对用户的这个需求&#xff0c;我们来介绍一下镭速的文件传输软件&#xff0c;看它是否真的那么快&#xff0c;快得让你惊讶。 文件传输要怎么…