集合根据上下级关系转树结构

1、创建实体对象

public class TreeNode {private String id;private String pid;private String name;private List<TreeNode> children;public TreeNode(String id,String pid,String name){this.id = id;this.pid = pid;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPid() {return pid;}public void setPid(String pid) {this.pid = pid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<TreeNode> getChildren() {return children;}public void setChildren(List<TreeNode> children) {this.children = children;}}

2、创建集合转换树工具类

public class TreeVo {private List<TreeNode> listJXKHTreeNode=new ArrayList<TreeNode>();private List<TreeNode> lstRootJXKHTreeNode=new ArrayList<TreeNode>();private int iMaxLevel=1;public List<TreeNode> getListJXKHTreeNode() {return listJXKHTreeNode;}public void setListJXKHTreeNode(List<TreeNode> listJXKHTreeNode) {this.listJXKHTreeNode = listJXKHTreeNode;}public List<TreeNode> getLstRootJXKHTreeNode() {return lstRootJXKHTreeNode;}public void setLstRootJXKHTreeNode(List<TreeNode> lstRootJXKHTreeNode) {this.lstRootJXKHTreeNode = lstRootJXKHTreeNode;}public int getiMaxLevel() {return iMaxLevel;}public void setiMaxLevel(int iMaxLevel) {this.iMaxLevel = iMaxLevel;}public static List<TreeNode> listGetStree(List<TreeNode> list) {List<TreeNode> treeList = new ArrayList<TreeNode>();for (TreeNode tree : list) {//找到根if (tree.getPid() == null) {treeList.add(tree);}//找到子for (TreeNode treeNode : list) {if(treeNode.getPid()!=null){if (treeNode.getPid().equals(tree.getId())) {if (tree.getChildren() == null) {tree.setChildren(new ArrayList<TreeNode>());}tree.getChildren().add(treeNode);}}}}return treeList;}//将list转换为树public  List<TreeNode> MakeTreeByList(List<TreeNode> listData ){if(listData != null) {for(int i=0;i<listData.size();i++){TreeNode mapObject = listData.get(i);String strAPID = mapObject.getPid() == null ? "" : mapObject.getPid();Boolean IsHaveParent=false;//找根节点for(int j=0;j<listData.size();j++){TreeNode mapObjectB=listData.get(j);String strBID=mapObjectB.getId();if(strAPID.equals(strBID)){IsHaveParent=true;break;}}//如果没有父级节点则为根节点if(!IsHaveParent){lstRootJXKHTreeNode.add(mapObject);}}}//找上下级关系for(int i=0;i<listData.size();i++){for(int j=0;j<listData.size();j++){if(listData.get(i).getId().equals(listData.get(j).getPid())){if(listData.get(i).getChildren()==null){listData.get(i).setChildren(new ArrayList<TreeNode>());}listData.get(i).getChildren().add(listData.get(j));}}}return lstRootJXKHTreeNode;}
}

3、测试实例

public class TestListToTree {public static void main(String[] args) {List<TreeNode> treeNodeList = new ArrayList<>();treeNodeList.add(new TreeNode("1","0","人力资源部"));treeNodeList.add(new TreeNode("12","1","人一"));treeNodeList.add(new TreeNode("12","1","人二"));treeNodeList.add(new TreeNode("14","1","人三"));treeNodeList.add(new TreeNode("11","1","人四"));treeNodeList.add(new TreeNode("2","0","财务资源部"));treeNodeList.add(new TreeNode("21","2","财一"));treeNodeList.add(new TreeNode("22","2","财二"));treeNodeList.add(new TreeNode("23","2","财三"));TreeVo treeVo = new TreeVo();List<TreeNode> treeNodes = treeVo.MakeTreeByList(treeNodeList);for (TreeNode treeNode : treeNodes) {System.out.println(treeNode.getName());}}
}

运行结果:
在这里插入图片描述

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

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

相关文章

VBA日历进度

hi&#xff0c;大家好&#xff01; 经过两次台风的洗礼之后&#xff0c;我们这里终于开始降温了&#xff0c;终于感觉到秋天的存在了&#xff01;时间也在一天天的过去&#xff0c;马上要十一假期了&#xff0c;十一过了&#xff0c;就可以算着过年了&#xff0c;让今天就让我…

OpenAI o1的真正前世竟来自字节?ReFT技术超越传统的数学微调能力,让GPT实现进化

导语&#xff1a; 随着ChatGPT-o1的发布&#xff0c;大型语言模型在复杂推理上取得进展&#xff0c;但传统监督式微调&#xff08;SFT&#xff09;仍存在局限。字节跳动研究院提出的增强微调&#xff08;ReFT&#xff09;技术结合了SFT和PPO算法&#xff0c;旨在提升模型泛化能…

HCIP考试范围包含哪些内容?HCIP备考指南分享

在数字化浪潮汹涌的今天&#xff0c;网络技术已成为支撑现代社会高效运转的不可或缺之力。Huawei Certified ICT Professional(HCIP)认证&#xff0c;作为这一领域中的精英标识&#xff0c;正吸引着无数技术爱好者的目光。那么&#xff0c;那么要考取这一认证需要掌握哪些考试内…

Github上开源了一款AI虚拟试衣,看看效果

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 前几天我们聊过关于虚拟换装的话题&#xf…

Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示

效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…

CVE-2024-1112 Resource Hacker 缓冲区溢出分析

漏洞简述 CVE-2024-1112 是 Resource Hacker 软件的一个缓冲区溢出漏洞。该漏洞存在于版本 3.6.0.92 中。由于软件在处理命令行中的文件路径时未对文件字符串长度进行限制&#xff0c;过长的字符串参数导致内存被过度写入&#xff0c;从而引发缓冲区溢出。 漏洞复现 构造长度…

基于相关性分析和梯度提升的睡眠质量影响因素研究

1.项目背景 注意该数据为人工合成数据&#xff0c;结论与认知可能不符&#xff0c;仅供学习分析的方法。 睡眠质量作为人类健康的重要指标&#xff0c;受到多种复杂因素的共同影响&#xff0c;包括生理状况、生活习惯、环境因素以及心理状态等多个方面。这些因素在不同的情境…

编译内核lspcu 工具源码 util-linux

1. 获取源码 wget https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.34/util-linux-2.34.tar.xz 2. 解压 tar xvf util-linux-2.34.tar.gz cd util-linux-2.34 本次实验环境&#xff1a;使用云主机 1.查看Lscpu , dmesg ,lsblk 等版本 我们看到这些指令都是…

JSP 指令标识和脚本标识的使用

文章目录 前言一、JSP 页面是什么&#xff1f;二、JSP 基本语法 1.指令标识 &#xff08;1&#xff09;page 指令&#xff08;2&#xff09;include 指令&#xff08;3&#xff09;taglib 指令2.脚本标识总结 前言 在进行Java Web 应用开发的过程中&#xff0c;JSP 是必不可少的…

全流程管理的商标管理软件如何实现一站式品牌保护?

如今&#xff0c;企业对于商标管理的需求已不再局限于单一的申请流程&#xff0c;而是扩展到了包括撤三、无效宣告、异议处理、维权行动乃至诉讼解决在内的全业务范畴。面对这一复杂多变的挑战&#xff0c;一款能够灵活应对、全面覆盖的可全业务管理商标管理软件成为了企业品牌…

湖北智彩星科技有限公司:AR共享游乐设备,让快乐加倍升级!

在科技日新月异的今天&#xff0c;娱乐方式正经历着前所未有的变革。湖北智彩星科技有限公司&#xff0c;作为行业内的佼佼者&#xff0c;凭借其创新的AR&#xff08;增强现实&#xff09;共享游乐设备&#xff0c;为大众带来了一场前所未有的娱乐盛宴&#xff0c;让快乐体验实…

在项目管理中,项目进度由哪些要素决定?

在项目管理领域&#xff0c;项目进度受到多种要素的综合影响。以下是一些关键的决定要素&#xff1a; 一、项目范围 1、任务清单 明确的任务清单是项目进度的基础。详细列出项目中需要完成的各项任务&#xff0c;包括任务的先后顺序、并行任务等&#xff0c;直接关系到进度规划…

中国土地利用覆盖和变化数据集(1980-2021)

该数据集通过融合森林资源清查数据和20种遥感土地利用产品&#xff0c;重建生成了1980-2015年中国森林覆盖数据集&#xff0c;空间分辨率为11公里。并且在此基础上进一步获得高精度森林覆被信息和土地利用覆盖数据集相融合&#xff0c;生成了中国1980-2021年土地利用覆盖和变化…

Vue3 + Vite Web项目 Electron 打包桌面应用程序

在根目录下创建 electron 文件夹 创建 electron/main.js 文件&#xff1a; // 导入模块 const { app, BrowserWindow ,Menu } require(electron) const path require(path)// 创建主窗口 const createWindow () > {const mainWindow new BrowserWindow({width: 1440…

RHEL7(RedHat红帽)软件安装教程

目录 1、下载RHEL7镜像 2、安装RedHat7 注&#xff1a;如果以下教程不想看&#xff0c;可以远程控制安装V:OYH-Cx330 【风险告知】 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演…

【网络安全】TCP和UDP

一、TCP/UDP对比 1.共同点&#xff1a; 都是工作在TCP/IP体系结构的传输层的协议 工作主要都是把端口号往原始数据封装 在 TCP 协议中&#xff0c;原始数据指的是应用程序产生的需要通过网络进行传输的数据。这些数据可以是各种类型的信息&#xff0c;例如文本、图像、音频、…

【项目】多设计模式下的同步异步日志系统

文章目录 项目介绍开发环境核心技术日志系统介绍为什么需要日志系统日志系统技术实现同步写日志异步写日志 相关技术知识补充不定参函数不定参宏函数的使用C中不定参函数的使用C中不定参函数的使用 设计模式单例模式工厂模式建造者模式代理模式 日志系统框架设计模块划分日志等…

高校大数据实训管理平台怎么选择?

泰迪智能科技大数据实训管理平台分为多个方向包括&#xff1a;人工智能方向、大数据方向、商务数据分析方向&#xff0c;不同高校可以结合高校情况选择合适自己院校的相关产品平台。 高校实训管理平台是实验室模块的核心母平台&#xff0c;对实验室的所有课程及实训资源进行统…

【Linux】手把手教你制作一个简易shell——(进程创建fork进程替换wait与进程等待exec的应用)(自定义shell程序设计)

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

HTTP协议:发展、请求响应、状态码 等

文章目录 HTTP发展历程HTTP请求URL和URIHTTP协议版本HTTP请求方法GET 和 POST 区别HTTP状态码HTTP 请求与响应报文HTTP 请求流程 HTTP 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在…