java_扁平<--->树转换的思路和方法参考

扁平转树形笔记

1.通过先找到根节点,然后在递归子节点的方法找子节点的子节点

public static List<Good> list2tree(List<Good> list){List<Good> resList = new ArrayList<>();for (Good good : list) {// 找到根节点if (good.getpId() == 0){Good root = getChild(good, list);resList.add(root);}}return resList;}// 找子节点方法public static Good getChild(Good parentNode,List<Good> list){for (Good good : list) {if (good.getpId() == parentNode.getId()){if (parentNode.getChildren() == null){parentNode.setChildren(new ArrayList<>());}parentNode.getChildren().add(getChild(good, list));}}return parentNode;}

2.利用map集合的特性,将pid相同的元素归类到同一集合中用map存储pid为键元素集合为值

    public static List<Good> list2treeForMap(List<Good> list){// 通过相同的父节点,将数据分类Map<Integer,List<Good>> mapForPid = list.stream().collect(Collectors.groupingBy(good -> good.getpId()));// 遍历传入的集合List<Good> res = new ArrayList<Good>();for (Good good : list) {if (good.getpId() == 0){ // 根节点res.add(good);}// 获取通过id获取子节点数据List<Good> goodList = mapForPid.get(good.getId());if (goodList != null && goodList.size() > 0) { // 有子节点if (good.getChildren() == null){good.setChildren(new ArrayList<>());}good.setChildren(goodList);}}return res;}

树形转扁平

public static List<Good> tree2list(List<Good> treeList){List<Good> resList = new ArrayList<>();for (Good good : treeList) {if (good.getChildren() != null && good.getChildren().size() > 0){resList.addAll(tree2list(good.getChildren()));}good.setChildren(null);resList.add(good);}return resList;}
}

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

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

相关文章

数据结构之排序

目录 ​ 1.常见的排序算法 2.插入排序 直接插入排序 希尔排序 3.交换排序 冒泡排序 快速排序 hoare版本 挖坑法 前后指针法 非递归实现 4.选择排序 直接选择排序 堆排序 5.归并排序 6.排序总结 一起去&#xff0c;更远的远方 1.常见的排序算法 排序&#xff1a;所…

Unity实现GoF23种设计模式

文章目录 Unity实现GoF23种设计模式概要一、创建型模式(Creational Patterns):二、结构型模式(Structural Patterns):三、行为型模式(Behavioral Patterns):Unity实现GoF23种设计模式概要 GoF所提出的23种设计模式主要基于以下面向对象设计原则: 对接口编程而不是对实…

IP段(CIDR格式)构建匹配库,传入IP查询是否命中

代码中有一些没用的自行去掉&#xff0c;我使用的CIDR格式&#xff0c;也可以通过IP的范围改造一下代码使用。 导入依赖 <dependency><groupId>com.github.seancfoley</groupId><artifactId>ipaddress</artifactId><version>5.3.3</ve…

RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装

MQ 之间的对比 三种常用的 MQ 对比&#xff0c;ActiveMQ、Kafka、RocketMQ 性能方面&#xff1a; 三种 MQ 吞吐量级别为&#xff1a;万&#xff0c;百万&#xff0c;十万消息发送时延&#xff1a;毫秒&#xff0c;毫秒&#xff0c;微秒可用性&#xff1a;主从&#xff0c;分…

可删除背包(计数类): P4141

https://www.luogu.com.cn/problem/P4141 看完第一眼想到打分治&#xff0c;然后记得以前打abc时好像见到过一种可撤销背包。 使用条件&#xff1a; 计数类&#xff0c;非最优性问题物品之间顺序无影响 因此我们直接撤销是对的

PyQt6 QFrame分割线控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

消除非受检警告

在Java中&#xff0c;有一些情况下编译器会生成非受检警告&#xff08;Unchecked Warnings&#xff09;。这些警告通常与泛型、类型转换或原始类型相关。消除这些警告可以提高代码的可读性和安全性。以下是一些常见的非受检警告以及如何消除它们的例子&#xff1a; 1. 泛型类型…

STM32-UART-DMA HAL库缓冲收发

文章目录 1、说明1.1、注意事项&#xff1a;1.2、接收部分1.3、发送部分 2、代码2.1、初始化2.2、缓冲接收2.3、缓冲发送2.4、格式化打印 1、说明 1.1、注意事项&#xff1a; HAL库的DMA底层基本都会默认开启中断使能&#xff0c;如果在STM32CubeMx禁用了中断相关的功能&…

【WinForm.NET开发】使用 FlowLayoutPanel 在 Windows 窗体上排列控件

本文内容 创建项目水平和垂直排列控件更改流方向插入流中断使用停靠和锚定来定位控件使用填充和边距排列控件通过在工具箱中双击来插入控件通过绘制控件轮廓来插入控件使用插入条来插入控件将现有控件重新分配给不同的父控件后续步骤 某些应用程序要求窗体布局在窗体调整大小…

人工智能与量子计算:开启未知领域的智慧之旅

导言 人工智能与量子计算的结合是科技领域的一场创新盛宴&#xff0c;引领我们进入了探索未知领域的新时代。本文将深入研究人工智能与量子计算的交汇点&#xff0c;探讨其原理、应用以及对计算领域的深远影响。 量子计算的崛起为人工智能领域注入了新的活力&#xff0c;开启了…

利用canvas封装录像时间轴拖动(uniapp),封装上传uniapp插件市场

gitee项目地址,项目是一个空项目,其中包含了封装的插件,自己阅读,由于利用了canvas所以在使用中暂不支持.nvue,待优化; 项目也是借鉴了github上的一个项目,timeline-canvas,​​​​​​​ ​​​​​​​

GPT-4V被超越?SEED-Bench多模态大模型测评基准更新

&#x1f4d6; 技术报告 SEED-Bench-1&#xff1a;https://arxiv.org/abs/2307.16125 SEED-Bench-2&#xff1a;https://arxiv.org/abs/2311.17092 &#x1f917; 测评数据 SEED-Bench-1&#xff1a;https://huggingface.co/datasets/AILab-CVC/SEED-Bench SEED-Bench-2&…

纽扣电池是什么

纽扣电池 电工电气百科 文章目录 纽扣电池前言一、纽扣电池是什么二、纽扣电池的类别三、纽扣电池的作用原理总结前言 纽扣电池具有易于更换的特点,这使得它们成为许多便携设备的理想电源选择。但是,由于它们较小且外壳易于打开,所以家中有婴幼儿的家庭应特别注意将其放置在…

抓包工具:Sunny网络中间件

Sunny网络中间件 和 Fiddler 类似。 是可跨平台的网络分析组件 可用于HTTP/HTTPS/WS/WSS/TCP/UDP网络分析 为二次开发量身制作 支持 获取/修改 HTTP/HTTPS/WS/WSS/TCP/TLS-TCP/UDP 发送及返回数据 支持 对 HTTP/HTTPS/WS/WSS 指定连接使用指定代理 支持 对 HTTP/HTTPS/WS/WSS/T…

Mybatis-Plus利用Sql注入器批量插入更新

Mybatis-Plus是在Mybatis持久层框架上封装的一层非常好用的工具&#xff0c;最近因为想要在Mapper里加入自己自定义的通用方法&#xff0c;所以用到了Mybatis-Plus的Sql注入器。Sql注入器的作用是可以实现自定义的sql脚本并注入到MappedStatement里&#xff0c;从而达到动态拼装…

[css] flex wrap 九宫格布局

<div class"box"><ul class"box-inner"><li>九宫格1</li><li>九宫格2</li><li>九宫格3</li><li>九宫格4</li><li>九宫格5</li><li>九宫格6</li><li>九宫格7&l…

【算法提升—力扣每日一刷】五日总结【12/06--12/10】

文章目录 2023/12/06力扣每日一刷&#xff1a;[206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/) 2023/12/07力扣每日一刷&#xff1a;[203. 移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/)力扣今日两刷&#xff1a;[19. 删除链…

iOS_给View的部分区域截图 snapshot for view

文章目录 1.将整个view截图返回image&#xff1a;2.截取view的部分区域&#xff0c;返回image&#xff1a;3.旧方法&#xff1a;4.Tips参考&#xff1a; 1.将整个view截图返回image&#xff1a; 这些 api 已被废弃&#xff0c;所以需要判断 iOS 版本 写两套代码&#xff1a; R…

NVMe over Fabrics with SPDK with iRDMA总结 - 1

1.0 Introduction简介 NVM Express* (NVMe*) drives are high-speed, low-latency, solid-state drives (SSDs), that connect over the server Peripheral Component Interconnect Express* (PCIe*) bus. NVM Express* (NVMe*) 硬盘是高速、低延迟的固态硬盘 (SSD),通过服…

轻松制作健身预约小程序

如果你想制作一个健身预约小程序&#xff0c;实现高效预约与健身管理&#xff0c;可以按照以下步骤进行操作。 第一步&#xff1a;注册登录乔拓云平台&#xff0c;进入后台 第二步&#xff1a;点击【轻应用小程序】&#xff0c;进入设计小程序页面。 第三步&#xff1a;在设计小…