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

使用递归将list转换成tree

在产品研发时遇到这样一个问题,对于省市区县这类三级联动的数据,前端插件需要一次把数据全部返回,单纯的使用接口查询字节的没办法满足要求。

如果一次把数据全部返回,前端使用起来很麻烦需要一条一条的进行查找。

常规的使用方法是把集合转换成一个有结构的树形结构。

树形结构是一种非线性的数据结构,它由n(n>=0)个有限结点组成,这些结点之间具有层次关系。每个结点可以有零个或多个子结点,其中根结点是层次最高的结点,没有父结点,其他结点有且仅有一个父结点。在树形结构中,子结点的数量被称为该节点的度,树的度是树中最大的度数。树的深度或高度是指树中结点的最大层次数。

实体类

@Data
public class AreaVO implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private Integer pid;private String areaCode;private String areaName;private Integer level;private List<AreaVO> childList;}

TreeUtil


import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;/*** @author zhizhao* @description* @create 2018-11-14 9:07*/
public class TreeUtil {public static List<AreaVO> toTree(List<AreaVO> treeNodeList) {//数据按照pid分组Map<Integer, List<AreaVO>> map = treeNodeList.stream().collect(Collectors.groupingBy(AreaVO::getPid));//找出所有的根节点,pid=0的为根节点List<AreaVO> areaList = map.get(0);for (AreaVO areaVO : areaList) {forEach(map, areaVO);}return areaList;}private static void forEach(Map<Integer, List<AreaVO>> collect, AreaVO areaVO) {List<AreaVO> nodeList = collect.get(areaVO.getId());if (collect.get(areaVO.getId()) == null) {return;}areaVO.setChildList(nodeList);for (AreaVO node : nodeList) {forEach(collect, node);}}}

转换输出结果

相关文章:

使用递归将list转换成tree

在产品研发时遇到这样一个问题&#xff0c;对于省市区县这类三级联动的数据&#xff0c;前端插件需要一次把数据全部返回&#xff0c;单纯的使用接口查询字节的没办法满足要求。 如果一次把数据全部返回&#xff0c;前端使用起来很麻烦需要一条一条的进行查找。 常规的使用方…...

untiy使用http下载资源

文章目录 提醒下载一个资源并保存到本地下载一张图片 提醒 部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用 下载一个资源并保存到本地 private IEnumerator DownloadFormServer_IE(st…...

03-编码篇-x264编译与介绍

使用FFMPEG作编码操作时&#xff0c;会涉及到将yuv数据编码成h264数据&#xff0c;FFmpeg的libavcodec中的libx264.c会调用x264库的源码作编码&#xff1a; 1.x264库编译 下载X264&#xff0c;地址为&#xff1a;http://www.videolan.org/developers/x264.html&#xff0c;并解…...

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…...

Full names for abbreviations of Linux Commands

synopsis Towards/On Full names for abbreviations of Linux Commands I) website addressII) Mapping between full names and abbreviations I) website address II) Mapping between full names and abbreviations su&#xff1a;Swith user 切换用户&#xff0c;切换到ro…...

kafka下载安装部署

Apache kafka 是一个分布式的基于push-subscribe的消息系统&#xff0c;它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统&#xff0c;作为hadoop生态系统的一部分&#xff0c;被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各…...

python包管理工具:pipenv的基本使用

很多语言都提供了环境隔离的支持&#xff0c;例如nodejs的node_module&#xff0c;golang的go mod&#xff0c;python也有virtualenv和pyvenv等机制。 为了建立依赖快照&#xff0c;通常会用pip freeze > requirements.txt 命令生成一个requirements.txt文件&#xff0c;在…...

AI系统ChatGPT网站系统源码AI绘画详细搭建部署教程,支持GPT语音对话+DALL-E3文生图+GPT-4多模态模型识图理解

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…...

MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些?

MC-4/11/03/400步进电机驱动器的主要驱动方式有哪些&#xff1f; 步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号&#xff0c;它就驱动步进电机按设定的方向转动一个固定的角度&#xff0c;这个固定的角度被称为“步距角”。步进电机不能…...

大数据技术原理与应用期末复习(林子雨)

大数据技术原理与应用期末复习&#xff08;林子雨&#xff09; Hadoop的特性HBase编程实践NoSQL的四大类型键值数据库优点&#xff1a;缺点&#xff1a; 列族数据库优点&#xff1a;缺点&#xff1a; 文档数据库优点&#xff1a;缺点&#xff1a; 图数据库优点&#xff1a;缺点…...

C练习——魔术师猜三位数

题目&#xff1a; 有一种室内互动游戏&#xff0c;魔术师要每位观众心里想一个三位数abc&#xff08;a、b、c分别是百位、十位和个位数字&#xff09;&#xff0c;然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少&#xf…...

three.js 使用 tweenjs绘制相机运动动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…...

Oracle VARCHAR和VARCHAR2区别

在Oracle数据库中&#xff0c;VARCHAR和VARCHAR2是两种不同的数据类型&#xff0c;它们的区别如下&#xff1a; 1.存储空间 VARCHAR和VARCHAR2在存储空间上有所不同。在Oracle 7及以下版本中&#xff0c;VARCHAR类型的长度是固定的&#xff0c;如果存储的数据长度小于定义的长…...

HarmonyOS 开发基础(八)Row和Column

HarmonyOS 开发基础&#xff08;八&#xff09;Row和Column 一、Column 容器 1、容器说明&#xff1a; 纵向容器主轴方向&#xff1a;从上到下纵向交叉轴方向&#xff1a;从左到右横向 2、容器属性&#xff1a; justifyContent&#xff1a;设置子元素在主轴方向的对齐格式…...

Visual Studio中项目添加链接文件

这个需求在VS里面使用还真不多见&#xff0c;只是最近在做项目的版本编号的时候遇到一个头大的问题&#xff0c;我一个解决方案下面有几十个类库&#xff0c;再发布的时候这几十个类库的版本号必须要统一&#xff0c;之前我们都是在单个的AssemblyInfo.cs里面去改相关的信息&am…...

做一个个人博客第一步该怎么做?

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…...

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置&#xff01; 实际上&#xff0c;vue开发框架的时候&#xff0c;充分考虑到了前端开发人员可能会遇到的各种各样的情况&#xff0c;比如大家经常遇到的&#xff0c;数据类型的校验&#xff0c;再比如&#xff0c;默认…...

Fooocus 使用笔记

目录 换装&#xff0c;换脸&#xff0c;修复畸形 比较和使用教程&#xff1a; 安装教程&#xff1a; github地址&#xff1a; 换装&#xff0c;换脸&#xff0c;修复畸形 &#x1f525;迄今最全&#xff01;Fooocus AI绘图 详细教程 AI换装 AI换脸 AI修复畸形 - 西瓜视频 …...

18. 从零用Rust编写正反向代理, 主动式健康检查源码实现

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…...

[DM8] 达梦8配置兼容Oracle

查看版本信息 select *&#xff0c;id_code from v$version; 查询解释&#xff1a; DM Database Server 64 V8 1-1-190-21.03.12-136419-ENT 64 版本位数标识&#xff0c;64表示为64位版本&#xff0c;无64则表示为32位版本 V8 大版本号&#xff0c;目前主要是V7、V8 1-1-190…...

ARM架构寄存器与参数管理核心技术解析

1. ARM架构寄存器与参数管理基础解析 在ARM架构的底层开发中&#xff0c;寄存器与参数管理是系统控制和调试的核心机制。作为嵌入式开发者&#xff0c;我经常需要与这两种资源打交道&#xff0c;它们虽然都用于存储数据&#xff0c;但在使用场景和特性上存在本质差异。 寄存器…...

Wedecode:全平台微信小程序源代码反编译与安全审计终极指南

Wedecode&#xff1a;全平台微信小程序源代码反编译与安全审计终极指南 【免费下载链接】wedecode 全自动化&#xff0c;微信小程序 wxapkg 包 源代码还原工具, 线上代码安全审计&#xff0c;支持 Windows, Macos, Linux 项目地址: https://gitcode.com/gh_mirrors/we/wedeco…...

HTTP客户端设计哲学:从axios到hoomanity的易用性演进

1. 项目概述&#xff1a;一个为人类设计的HTTP客户端在构建现代应用程序时&#xff0c;与外部API或服务进行HTTP通信几乎是每个开发者都会遇到的日常任务。无论是调用一个天气接口、上传文件到云存储&#xff0c;还是与自家的微服务进行数据交换&#xff0c;我们都需要一个可靠…...

基于xclaude-plugin框架的Claude自定义插件开发实战指南

1. 项目概述&#xff1a;Claude插件生态的“瑞士军刀”如果你最近在深度使用Claude&#xff0c;尤其是Claude Desktop应用&#xff0c;那你大概率已经感受到了插件生态的潜力与混乱。官方插件商店虽然方便&#xff0c;但总有些特定需求找不到现成的解决方案&#xff0c;或者找到…...

5分钟终极指南:在Blender中完美导入Rhino 3dm文件的完整教程

5分钟终极指南&#xff1a;在Blender中完美导入Rhino 3dm文件的完整教程 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 你是否正在寻找一种简单、快速且免费的方法&#xff0c…...

Horos:让医学影像分析像翻阅相册一样简单

Horos&#xff1a;让医学影像分析像翻阅相册一样简单 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos is based upon OsiriX an…...

Akebi-GC游戏辅助工具:5个核心模块深度解析与实战应用指南

Akebi-GC游戏辅助工具&#xff1a;5个核心模块深度解析与实战应用指南 【免费下载链接】Akebi-GC (Fork) The great software for some game that exploiting anime girls (and boys). 项目地址: https://gitcode.com/gh_mirrors/ak/Akebi-GC Akebi-GC是一款专为特定游戏…...

Termux安装Linux总失败?可能是你的安卓版本太老了!手把手解决apt update报错

Termux在老旧安卓设备上的终极解决方案&#xff1a;从原理到实践 你是否也曾在抽屉深处翻出一台尘封多年的安卓设备&#xff0c;满心欢喜地想要通过Termux让它重获新生&#xff0c;却在apt update的报错信息前铩羽而归&#xff1f;这并非个例——据统计&#xff0c;全球仍有超过…...

手持设备串口屏应用指南:从架构解析到实战开发

1. 项目概述&#xff1a;为什么手持设备需要一块“聪明”的屏幕&#xff1f;在手持设备这个领域摸爬滚打了十几年&#xff0c;从早期的黑白点阵屏到后来的TFT彩屏&#xff0c;再到如今各种智能交互界面&#xff0c;我深刻感受到一个趋势&#xff1a;设备越来越“聪明”&#xf…...

Chrome QRCode插件终极指南:如何在3分钟内实现跨设备无缝内容同步

Chrome QRCode插件终极指南&#xff1a;如何在3分钟内实现跨设备无缝内容同步 【免费下载链接】chrome-qrcode :zap: A Chrome plugin to Genrate QRCode of URL / Text, or Decode the QRcode in website. 一个Chrome浏览器插件&#xff0c;用于生成当前URL或者选中内容的二维…...