当前位置: 首页 > 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)来完成的。操作: …...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...