把具有父子关系的数据组装成树状结构

java将有父子关系的list转换为树形结构 在项目对接过程中,被调用方给返回了一个对象列表,对象中包含id和parentId,但返回的数据没有层级结构,需要调用方自己组装成树级结构;由于返回的是否无序的列表,首先需要找到顶级结构,然后更加parentId获取子级,递归循环,指定子级没有后代信息;第一种、首先想到的是循环列表,对一个列表进行多次循环,每次只找一级,即可实现;相对来说第二种方式,比较合适;第二种、先根据parentId聚合,然后再对聚合map进行递归;以上实现方法,还是有点麻烦,还在找一种更方便快速的方法实现; 阅读详情

需求:把具有父子关系的数据组装成树状结构

记录备忘一下。

实现的逻辑不难,不过每次实现都需要花点时间,本人比较懒不想再去思考了。

实体类:

@Data
public class CategoryVo {

    /**
     * 类别Id
     */
    private Integer id;

    /**
     * 父类别id当id=0时说明是根节点,一级类别
     */
    private Integer parentId;


    /**
     * 子类目
     */
    private List<CategoryVo> subCategories;

}

实现逻辑:

public void doWork(List<CategoryVo> voList) {
        // 1.找根节点
        List<CategoryVo> rootList = voList.stream().filter(
                item -> item.getParentId().equals(0)).collect(Collectors.toList());
        // 2.找子节点
        setSub(rootList, voList);
    }

    public void setSub(List<CategoryVo> voList, List<CategoryVo> dataList) {
        for (CategoryVo root : voList) {
            List<CategoryVo> subList = new ArrayList<>();
            for (CategoryVo vo : dataList) {
                if (root.getId().equals(vo.getParentId())) {
                    subList.add(vo);
                }
            }
            root.setSubCategories(subList);
            setSub(subList, dataList);
        }
    }

 

Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级 在平时的开发工作中,经常遇到这样一个场景,在数据库中存储了具有父子关系的数据,需要将这些数据以树形结构的形式在界面上进行展示。本文的目的是提供了一个通用的编程模型,解决将具有父子关系的数据转换成树形结构的问题。如有不正之处,欢迎大家批评指正。编程模型我们以北京行政区划为例,讲解整个模型。北京市:市辖区 县市辖区:东城区 西城区 朝阳区 丰台区 石景山区 海淀区 门头沟区 房山区 通州区 顺义区 昌平 阅读详情

相关推荐

java父子分类树构建工具类

java父子分类树构建工具类

小Y在线编码 497

Java中将返回的父子层级数据组装成一条条记录数据

allChimplaintList和 mapData均为全局变量。数据是别人返回的,我这边要处理成一条条记录保存到我们库里面,思路 : 逆向反推,从子级查父级。

weixin_42960380的博客 543

Java 将有父子关系的数据转换成树形结构数据

一、数据库父子结构数据设计     大部分采用 parentId的形式来存储父id,并且只存储父id,祖父Id不存储。也可以添加存储层级级别或者层级关系等字段。 CREATE TABLE `t_resource` ( `id` varchar(255) NOT NULL COMMENT '主键', `parent_id` varchar(255) DEFAULT NULL COMMENT '父ID', `name` varchar(255) DEFAULT NULL COMMENT '名称', `url` varchar(255) DEFAULT NULL COMMENT '

快速将有父子关系数据组装成父子list

假如有一组数据 有父子,祖父或者无限极父子关系,可以使用下面的方式快速组装成tree 继承BeanTree import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class BeanTree implements Serializable { private ...

雨夜星辰03--的博客 4147

Gromacs文件格式全解析:xtc vs trr vs cpt,哪种更适合你的模拟需求?

本文深入解析Gromacs分子动力学模拟中的三种核心文件格式xtc、trr和cpt,详细对比其技术特性和适用场景。xtc适合存储效率优先的场景,trr保留完整动力学数据,cpt确保模拟精确重启。通过实际配置示例和存储优化技巧,帮助用户根据模拟需求选择最佳格式组合,平衡分析灵活性与存储成本。

weixin_29281941的博客 97

香橙派OPi 6系列选型指南:RK3588与RK3588S开发板深度对比

开发板选型是嵌入式系统设计的关键环节,尤其在边缘计算和AI推理等场景中,芯片的差异直接影响硬件架构。瑞芯微RK3588及其精简版RK3588S是当前高端开发板的核心方案,两者在PCIe通道、显示输出和SATA支持上存在显著区别。理解这些原理,有助于工程师根据项目需求快速匹配产品。香橙派OPi 6系列基于这两款芯片,衍生出OPi 6、OPi 6 Pro与OPi 6 Max三种形态:紧凑型适合嵌入式门禁与AI盒子,Pro版凭借双屏异显和PCIe 3.0满足收银机与视频分析,Max的双2.5G网口和大内存则面向轻

weixin_29185167的博客 228

php无限极分类组装成分类树的巧妙代码

现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式: $arr = array( array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'), array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'), array("id" => 3

zhang197093的博客 5301

11、rsa-目标主机支持RSA密钥交换【原理扫描】的漏洞

通过将 etcd 的 TLS 密钥交换算法从 RSA 升级为 ECDHE,可实现前向保密,彻底消除 “私钥泄露导致历史流量解密” 的风险。核心步骤是通过强制启用含ECDHE的套件,并禁用 RSA 密钥交换套件,同时建议升级到 TLS 1.2+ 并优化证书类型(优先 ECDSA)。这一配置符合云原生安全最佳实践,也是 Kubernetes 等依赖 etcd 的系统推荐的安全标准。生成临时密钥的具体步骤是什么?如何验证etcd是否已成功更新为ECDH密钥交换算法?配置临时密钥交换算法可能带来哪些性能影响。

xuebo1129927648的博客 1万+

java构建树形结构的方式、如何组装树状结构数据

java、stream

zhangfuping123456789的博客 4385

安装 Claude Code 并接入阿里云百炼(Bailian)

这些工具通常提供可视化界面,只需在设置中填入阿里云百炼的 API Key 和 Base URL 即可,无需配置环境变量。注意:如果你使用的是阿里云百炼的 Coding Plan 套餐,请使用该套餐专属的 API Key 和 Base URL。你可以使用文本编辑器打开该文件,或者在终端使用命令(如 macOS/Linux 下使用 nano ~/.claude/settings.json)。你可以直接用自然语言下达指令,例如:“帮我在这个目录下写一个 Python 脚本,实现两数之和的功能”。

hopsky的博客 1846

VFH避障/局部路径规划算法

VFH避障/局部路径规划算法 本文章是我看《The Vector Field Histogram-Fast Obstacle Avoidance for Mobile Robots》论文时候的笔记,感兴趣的欢迎去看原论文。 VFH中有一些概念是从其他算法中借鉴过来的,并且VFH算法本身就是对VFF(Virtural Force Field)的一种改进,其中有很多的相似之处。所以按照原论文的思路,先介绍由CMU提出的Certainty Grid算法中的一些概念,再介绍一下势场法中的一些概念,接着介绍一下VFF

qq_41845878的博客 8120

java组装树状结构数据集合_java递归组装树形结构

/**** @param rootList 根结点* @param listAll 所有结点* @param parentId 父子组织关系依赖属性* @return 返回树形字符串*/public String getTree(List> rootList, List> listAll, String parentId) {JSONArray jsonRootList = JSON...

weixin_39711441的博客 634

【26美赛C题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文为2026年美国大学生数学建模竞赛(MCM/ICM)C题的解题思路与资源分享。文章提出系统学习数学建模的重要性,强调竞赛考察的是综合建模能力而非单纯计算。针对C题常见的复杂系统评估类问题,作者提供了一套完整的建模框架,包括问题拆解、指标体系构建、数据建模、决策模型等六个阶段。订阅者可获得Python/Matlab双版本代码、论文结构解析、AI辅助建模方法等资源。内容适合准备参加各类数学建模竞赛的学生,特别是希望通过AI技术提升建模效率的参赛者。

一键难忘的博客 1688

Android基础 平面数据与父子关系的数据转换

写在前面:对于父子关系的数据一般在做城市的三级联动的时候,可能会将数据做成此类形的数据。但是有时候后台返回的数据却是平面的,导致这种原因的问题是因为,在数据库存储的时候,只能是按照平面的数据去存储,然后再根据他们的父id去处理他们的层级关系。 好了说了一些无关紧要的话,然后开始今天的主要内容,我会将今天讲解的分为以下几点: 平面数据转换为父子关系的数据 从本地读取大文件,并进行处理 好话不多说,直接

L_zhp的博客 817

基于STM32的汽车主门电动窗开关系统设计方案

以下是基于 STM32CubeMX 和 HAL 库的示例代码,可实现基本的功能。

weixin_42300449的博客 996

orangepi香橙派用户名及密码修改和VNC远程登陆

1、修改 /etc/passwd用户信息文件 vim /etc/passwd #admin❌503:501::/home/admin:/bin/bash #把用户名admin改成rest #test❌503:501::/home/test:/bin/bash 2、修改 /etc/shadow用户密码文件 vim /etc/shadow #admin:Dnakfw28zf38w:8764:0:168:7::: #由于密码加密方式存放,只修改用户名即可(密码不变) #test:Dnakfw28zf38w:876

weixin_40227845的博客 5663

如何将具有父子关系的数据快速变成树结构

在实际项目中,经常会碰到类似的场景,举个例子,很多情况下,数据库中存在父子关系的数据保存在一张表里,而关联关系通过"parentId"属性进行关联,后端在数据查询时,会得到一个数组,此时前端可能需要将数据展示为树状结构,例如一个中后台的权限数据。 很多开发者采用的方式是一遍一遍的遍历数据,比如第一次遍历找到根节点,接着再遍历数据找到根节点的子节点,再遍历数据找到其个子节点的子节点,即使是把已经...

weixin_34344403的博客 2293

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java8 新特性Stream实现树状结构

当我们要对数据的父子关系进行树状结构整理时,一般我们会想到使用递归进行数据组装,但是这样写相对来说是比较麻烦的了,或者如果你的java架构是hibernate的时候可以直接通过注解实现,好了现在说下stream是如何实现树状结构的 本例子是以 CategoryId 和 pCategoryId 为父子关系 查出父子关系的所有数据 pidList //以pid为Key进行分组存入Map Map<Long,List> pidListMap = pidList.stream().collect(C

qq_35509615的博客 995

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

nodejs将有父子关系的数据转换成树形数据结构

数据库里面树形菜单的数据,m_n_id是根节点id,m_p_id是父节点id 未进行处理的数据格式: 处理方法: function translateDataToTree(data) { let parents = data.filter(value => value.m_p_id === 'undefined' || value.m_p_id === null ||...

wusq的博客 991

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java 组装树

* 构造树 * @param nodes * @param idKey * @param parentIdKey * @param childrenKey * @return */ public static List<Map<String, Object>> buildTree(List<Map<String, Object>> nodes, String idKey, Strin...

往事随风的博客 308

java 不写递归方法把List组装成树的格式

java 不写递归方法把List组装成树的格式 通过for循环和Map来实现List组装成树。 代码如下 import com.alibaba.fastjson.JSONArray; import java.util.*; import java.util.stream.Collectors; public class TestTree { private String id; private String parentId; private String name; pri

weixin_40839865的博客 362

递归查询菜单

@Override public List listWithTree() { // 查询所有分类 List entityList = baseMapper.selectList(null); // 组装成父子的树状结构 List collect = entityList.stream().filter(categoryEntity -> categoryEntity.getParentCid().longValue() == 0) .map((menu) -> { menu.setChildre

qq_39342549的博客 375

商品三级分类,查出所有分类以及子分类,以树形结构组装起来

@Override public List listWithTree() { //1.查出所有分类 List entities = baseMapper.selectList(null); //2.组装成父子的树型结构 //2.1),找到所有的一级分类 List levelMenus = entities.stream().filter(categoryEntity -> categoryEntity.getParentCid() == 0 ).map((menu) -> { menu.setC

m0_55803538的博客 376

无限级分类数据递归成树结构

/** * 递归生成分类树 * @param array $item 分类数据 * @param int $parent_id 父id * @param string $sub 子类名称 * @return array */ public static function getTree($item = array(), $parent_id = 0, $sub = 'children') { $data =...

291

java8 菜单树状结构

【代码】java8 菜单树状结构。

从零开始的博客 253
上一篇: kettle集群
下一篇: lambda表达式使用
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值