当前位置: 首页 > news >正文

Java:封装树结构

实体类

public class DictTreeselectVO {private String value;private String label;/*** 节点*/private String parentId;private List<DictTreeselectVO> children = new ArrayList<DictTreeselectVO>();public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getLabel() {return label;}public void setLabel(String label) {this.label = label;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}public List<DictTreeselectVO> getChildren() {return children;}public void setChildren(List<DictTreeselectVO> children) {this.children = children;}
}

返回结果

public class TreeSelectT implements Serializable
{private static final long serialVersionUID = 1L;/** 节点ID */private String id;/** 节点名称 */private String label;/** 子节点 */@JsonInclude(JsonInclude.Include.NON_EMPTY)private List<TreeSelectT> children;public TreeSelectT(){}public TreeSelectT(DictTreeselectVO dictTreeselectVO){this.id = dictTreeselectVO.getValue();this.label = dictTreeselectVO.getLabel();this.children = dictTreeselectVO.getChildren().stream().map(TreeSelectT::new).collect(Collectors.toList());}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getLabel() {return label;}public void setLabel(String label) {this.label = label;}public List<TreeSelectT> getChildren() {return children;}public void setChildren(List<TreeSelectT> children) {this.children = children;}
}

工具类

/**
* 创建树结构
* @param treeselectList
* @return
*/
public static List<TreeSelectT> buildTreeSelect(List<DictTreeselectVO> treeselectList){List<DictTreeselectVO> treeselectVOList = buildDictTreeselect(treeselectList);return treeselectVOList.stream().map(TreeSelectT::new).collect(Collectors.toList());
}/**
* 构建前端所需要树结构
* @param treeselectList
* @return
*/
private static List<DictTreeselectVO> buildDictTreeselect(List<DictTreeselectVO> treeselectList){List<DictTreeselectVO> returnList = new ArrayList<DictTreeselectVO>();List<String> tempList = treeselectList.stream().map(DictTreeselectVO::getValue).collect(Collectors.toList());for (DictTreeselectVO dictTreeselectVO : treeselectList) {// 如果是顶级节点, 遍历该父节点的所有子节点if (!tempList.contains(dictTreeselectVO.getParentId())) {recursionFn(treeselectList, dictTreeselectVO);returnList.add(dictTreeselectVO);}}if (returnList.isEmpty()){returnList = treeselectList;}return returnList;
}/*** 递归列表* @param list* @param t*/
private static void recursionFn (List<DictTreeselectVO> list, DictTreeselectVO t){// 得到子节点列表List<DictTreeselectVO> childList = getChildList(list, t);t.setChildren(childList);for (DictTreeselectVO tChild : childList) {if (hasChild(list, tChild)){recursionFn(list, tChild);}}
}/*** 得到子节点列表* @param list* @param t* @return*/
private static List<DictTreeselectVO> getChildList(List<DictTreeselectVO> list, DictTreeselectVO t)
{List<DictTreeselectVO> tlist = new ArrayList<DictTreeselectVO>();Iterator<DictTreeselectVO> it = list.iterator();while (it.hasNext()){DictTreeselectVO n = (DictTreeselectVO) it.next();if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().equals(t.getValue())){tlist.add(n);}}return tlist;
}/*** 判断是否有子节点*/
private static boolean hasChild(List<DictTreeselectVO> list, DictTreeselectVO t){return getChildList(list, t).size() > 0;
}

相关文章:

Java:封装树结构

实体类 public class DictTreeselectVO {private String value;private String label;/*** 节点*/private String parentId;private List<DictTreeselectVO> children new ArrayList<DictTreeselectVO>();public String getValue() {return value;}public void s…...

linux内核 pintrl子系统

1、什么是pinctrl子系统 在 Linux 内核中&#xff0c;pinctrl子系统是一个专门用于管理和控制 SoC引脚复用和配置的子系统。SoC 通常具有大量的引脚&#xff08;pin&#xff09;&#xff0c;这些引脚可以被配置为不同的功能&#xff0c;比如 GPIO&#xff08;通用输入输出&…...

网络通信要素

网络介绍 定义&#xff1a;将具有独立功能的多台计算机通过通信线路和通信设备连接起来&#xff0c;在网络管理软件及网络通信协议下&#xff0c;实现资源共享和信息传递的虚拟平台。 学习网络的目的&#xff1a; 能够编写基于网络通信的软件或程序&#xff0c;通常来说就是网…...

day03_作业

一、简答题 继承的格式与好处 格式&#xff1a;class A extends B 好处&#xff1a;1.可以实现代码的复用&#xff0c;将共性的代码向上抽取&#xff0c;抽取到父类中。需要使用这些属性和行为的类&#xff0c;通过继承即可使用。2.当需要添加新的功能时&#xff0c;可以通过…...

pyinstaller程序打包,资源嵌入exe

参考&#xff1a;https://blog.csdn.net/qq_48979387/article/details/132359366 一、参数说明 -F 最终打包为一个可执行文件。-w 取消Windows显示窗口-add-data ‘dll;dll’&#xff0c;将当前目录dll下的文件打包到可执行文件的dll中&#xff0c;最终会在解压文件的dll文件…...

如何使用 OCR 和 GPT-4o mini 轻松提取收据信息

利用 OCR 和强大的 GPT-4o 迷你模型对收据进行信息提取 利用 OCR 和强大的 GPT-4o 迷你模型对收据进行信息提取 欢迎来到雲闪世界。&#xff0c;我将向您展示如何从收据中提取信息&#xff0c;并提供收据的简单图像。首先&#xff0c;我们将利用 OCR 从收据中提取信息。然后&a…...

go 事务

事务处理 首先启动事务时一定要做错误判断建议在启动事务之后马上写defer方法在defer方法内对err进行判断&#xff0c;如果全局中有err!nil就回滚全局中err都为nil则提交事务在提交事务之后我们可以定义一个钩子函数afterCommit&#xff0c;来统一处理事务提交后的逻辑。 示例…...

C,数据结构,多进程线程,网络编程面试题总结

目录 1.指针数组和数组指针 2.结构体字节对齐 3.Tcp和Udp的区别 4.同步通信和异步通信的区别 5.多线程理解 6.大小端验证 7.互斥锁相关问题 8.共享内存特点 9.c中的指针 10.Gcc编译 11.Socket的了解 12.Ip地址和子网掩码如何决定网卡所在的网段 13.数据结构中栈与…...

【Cesium学习】着色器详解【待进一步总结】

在Cesium中&#xff0c;drawCommand 和 CustomShader 是与渲染管线和自定义渲染效果相关的两个重要概念&#xff0c;但它们各自有不同的作用和应用场景。下面我将分别详解这两个概念。 drawCommand drawCommand 是 Cesium 渲染引擎内部使用的一个概念&#xff0c;它代表了单个…...

【3】静态路由(Static routing)

目录 一、有类路由和无类路由 二、路由的基本知识 三、配置 路由的组成&#xff1a; 四、特殊——默认路由 五、优点和缺点 六、实验 数据通信是双向的&#xff0c;路由器不同的接口属于不同的广播域和冲突域 一、有类路由和无类路由 有类路由&#xff1a;有ABC类别之…...

阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技

阿里声音项目Qwen2-Audio的部署安装&#xff0c;在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有…...

RAG(检索增强生成)

RAG (Retrieval-Augmented Generation) 是一种自然语言处理的模型架构&#xff0c;主要用于生成性任务&#xff0c;如文本生成、对话系统等。RAG 将检索和生成两个任务结合起来&#xff0c;以提高生成结果的质量和相关性。 RAG 模型的主要思想是通过检索阶段获取相关的上下文信…...

AcWing848有向图的拓扑排序

拓扑排序的流程&#xff1a; 插入&#xff08;a&#xff0c;b&#xff09;&#xff0c;表示a->b的关系&#xff0c;调用add(a,b),每次吧b的入度1&#xff0c;d[b]; 然后调用topsort&#xff0c;返回1表示存在拓扑序列&#xff0c;返回0表示不存在拓扑序列。判断是否存在拓扑…...

猫咪掉毛很严重,家中猫毛该如何清理?快来看资深铲屎官经验分享

想必铲屎官们都见识过换毛季的威力。拿我家举例&#xff0c;养了一只长毛&#xff0c;一只短毛&#xff0c;打扫完不用半天&#xff0c;家里就能重新出现不少猫毛。严重的时候&#xff0c;每天都要扫地机器人扫三次&#xff0c;拖一次。 最近两天外出&#xff0c;回来给它们梳…...

Midjourney进阶-反推与优化提示词(案例实操)

​ Midjourney中提示词是关键&#xff0c;掌握提示词的技巧直接决定了生成作品的质量。 当你看到一张不错的图片&#xff0c;想要让Midjourney生成类似的图片&#xff0c;却不知道如何描述画面撰写提示词&#xff0c;这时候Midjourney的/describe指令&#xff0c;正是帮助你推…...

大公报发表欧科云链署名文章:发行港元稳定币,建Web3.0新生态

欧科云链研究院资深研究员蒋照生近日与香港科技大学副校长兼香港Web3.0协会首席科学顾问汪扬、零壹智库创始人兼CEO柏亮&#xff0c;在大公报发布联合署名文章 ——《Web3.0洞察 / 发行港元稳定币&#xff0c;建Web3.0新生态》&#xff0c;引发市场广泛讨论。 文章就香港稳定币…...

Mybatis的一些常用知识点(面试)

什么是MyBatis? Mybatis 是⼀个半 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了 JDBC。 它让开发者在开发时只需要关注 SQL 语句本身&#xff0c;不需要花费精⼒去处理加载驱动、创建连接等繁杂的过程 缺点&#xff1a; SQL语句的编写⼯作量较⼤ SQ…...

stm32—ADC

1. 什么是ADC 生活中我们经常会用到ADC这种器件&#xff0c;比如说&#xff0c;当我们在使用手机进行语音通信时&#xff0c;ADC器件会将我们的声信号转换为电信号 (模拟信号 ---> 数字信号) 模拟信号&#xff1a; 模拟信号是指用连续变化的物理量表示的信息&#xff0c;其信…...

【微信小程序】吐槽生态之云开发服务端能力不足

回想起来&#xff0c;笔者开发小程序的经历也有4年多了&#xff0c;以前因为技术积累接触不到比较深层次的东西&#xff0c;也不理解软件生态这个概念&#xff0c;现在开发小程序的过程中&#xff0c;越来越觉得很多生态微信的进步空间很大。 问题引入 比如说&#xff0c;在迭…...

AnimateDiff论文解读

GitHub - Kosinkadink/ComfyUI-AnimateDiff-Evolved: Improved AnimateDiff for ComfyUI and Advanced Sampling Support 视频编码 定义: 首先&#xff0c;将视频数据转换为一系列的潜变量代码(latent codes)。这是通过一个预训练的自动编码器(auto-encoder)来完成的。操作: …...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...