使用递归将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);}}}

转换输出结果

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

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

相关文章

软件测试|解读Python的requirements.txt文件:管理项目依赖的完整指南

简介 在Python项目中&#xff0c;管理依赖库是必不可少的。requirements.txt文件是一种常用的方式&#xff0c;用于列出项目所需的所有依赖库及其版本。本文将详细介绍requirements.txt的用法&#xff0c;帮助你更好地管理项目的依赖。 使用步骤 创建requirements.txt文件&am…

2024 爱分析 · AI 与大模型高峰论坛:和鲸喜获两项殊荣!

1 月 9 日下午&#xff0c;“2024 爱分析 AI 与大模型高峰论坛”在京举办。本次论坛以“智能涌现&#xff0c;价值焕新”为主题&#xff0c;汇聚众多专家学者、实践先驱&#xff0c;共同探讨 AI 与大模型在企业内的新场景、新价值、新路径。论坛中&#xff0c;和鲸科技成功入选…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷①

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回文字“xa*a*b的值&#xff1a;”和x的值&#xff1b;返回文字“xa-b的值&#xff1a;”和x的值&#xff1b;返回文字“xab的值&#xff1a;”和x的值。其中变量a、b均须为整型…

力扣120. 三角形最小路径和(Java 动态规划)

Problem: 120. 三角形最小路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来&#xff0c;具体的思路&#xff1a; 1.记录一个int类型的大小的 n 乘 n n乘n n乘n的数组&#xff08;其中 n n n为…

使用 Github、Hugo 搭建个人博客

Hugo 静态网站构建手册&#xff1a;https://jimmysong.io/hugo-handbook/ 关键字&#xff1a;开源 博客 框架 1、GitHub Pages 官网&#xff1a;https://pages.github.com/ 文档&#xff1a;https://docs.github.com/zh Github Pages 简介 Websites for you and your project…

HarmonyOS——ArkUI状态管理

一、状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&…

python 异常处理 try...except...finally..

python 异常处理&#xff1a; 简单的异常处理主要依靠内置异常处理结构体&#xff0c;代码结构如下&#xff1a; try: … except ValueError as e: # 异常判断&#xff0c;出现ValueError错误时处理机制 … except ZeroDivisionError as e: # 异常判断&#xff0c;出现ZeroDiv…

2024年免费服务器活动整理汇总

随着科技的发展&#xff0c;服务器在各行各业的应用越来越广泛&#xff0c;而免费服务器活动也成为了许多企业和个人关注的焦点。目前有许多免费服务器活动可供选择&#xff0c;本文将为大家整理汇总免费服务器活动&#xff0c;帮助大家更好地了解和参与。 一、腾讯云免费服务器…

【Linux】:Linux中的Git分支管理

本章开始介绍 Git 的杀⼿级功能之⼀&#xff08;注意是之⼀&#xff0c;也就是后⾯还有之⼆&#xff0c;之三……&#xff09;&#xff1a;分⽀。分⽀就是科幻电影⾥⾯的平⾏宇宙&#xff0c;当你正在电脑前努⼒学习 C 的时候&#xff0c;另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习…

day15 层序遍历 翻转二叉树 对称二叉树

题目1&#xff1a;102 二叉树的层序遍历 题目链接&#xff1a;102 二叉树的层序遍历 题意 根据二叉树的根节点root&#xff0c;返回其节点值的层序遍历 借助队列实现&#xff0c;因为队列是先进先出的逻辑&#xff0c;符合层序遍历一层一层遍历的思想 代码 /*** Definitio…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…

开发代码基础

首先安装驱动&#xff0c;在ARDUINO环境下安装&#xff0c;然后安装开发板&#xff0c;详见哔哩哔哩教程 1&#xff1a;接入点模式&#xff08;也称 AP&#xff09; 通过以下示例程序&#xff0c;NodeMCU将会建立一个名为taichi-maker的WiFI。您可以使用手机或电脑连接该WiFi…

【论文阅读】Self-supervised Learning: Generative or Contrastive

Abstract 研究了在计算机视觉、自然语言处理和图形学习中用于表示的新的自监督学习方法。全面回顾了现有的实证方法&#xff0c;并根据其目的将其归纳为三大类&#xff1a;生成性、对比性和生成性对比&#xff08;对抗性&#xff09;。进一步收集了关于自我监督学习的相关理论…

Java浮点数精度问题与BigDecimal详解

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们在日常的Java编程中&#xff0c;经常会遇到处理金融数据的情况&#xff0c;比如计算商品的价格或者处理用户的账户余额。在这些场景下&#xff0c;精确的数值计算就显得尤为重要。这时候&#xff0c;BigDeci…

【SPDK】【NoF】使用SPDK实现NVMe over Fabrics Target

本文使用两台PC&#xff0c;一台做NVMe over Fabrics Target&#xff08;服务端&#xff09;&#xff0c;一台做NVMe over Fabrics initiator&#xff08;客户端&#xff09;。首先使用SoftRoCE来实现底层的rdma传输&#xff0c;然后使用SPDK来实现NVMe over Fabrics Target。 …

内存卡为什么会提示格式化,内存卡提示格式化还能恢复吗

对于许多电脑用户来说&#xff0c;执行内存卡格式化操作导致数据丢失是一个常见的问题。在日常生活中&#xff0c;数据丢失的情况并不少见&#xff0c;但内存卡格式化后的数据恢复相对较难。目前&#xff0c;能够使用的方法较少&#xff0c;且成功率较低&#xff0c;但并不是没…

全网快递查询工具:批量查询,提升工作效率的利器

在快递行业日新月异的今天&#xff0c;高效、准确的快递信息管理显得尤为重要。固乔快递查询助手正是一款专为快递网点设计的实用工具&#xff0c;它可以帮助您快速、批量查询全网快递单号&#xff0c;为您的网点运营带来诸多便利。 一、固乔快递查询助手的用途 批量查询&…

java: 5-3 for循环

文章目录 1. for1.1 基本语法1.2 练习1.3 执行流程1.4 细节1.5 编程思想 (练习) 【老韩b站视频笔记p121-p125】 1. for 让你的代码可以循环执行。 1.1 基本语法 for 关键字&#xff0c;表示循环控制。for 有四要素: (1)循环的初始变量。 (2)循环的条件&#xff08;变量条件&…

代码随想录算法训练营第25天 | 216.组合总和III 17.电话号码的字母组合

目录 216.组合总和III &#x1f4a1;解题思路 回溯三部曲 &#x1f4bb;实现代码 17.电话号码的字母组合 &#x1f4a1;解题思路 # 数字和字母如何映射 # 回溯法来解决n个for循环的问题 &#x1f4bb;实现代码 216.组合总和III 题目链接&#xff1a;216.组合总和III …