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

Java 处理Mysql获取树形的数据

Mysql数据:

代码如下:

Entity:

@Data
@Accessors(chain = true)
public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTime;private Integer updateTime;private Integer isDeleted;
}

 Service核心代码:

List<Region> reginaList = regionMapper.findReginaList();//将数据以父类ID分组成map:{1:[xxx,xxx],2:[xxx,xxxx]}Map<BigInteger, List<Region>> parentIdMap = reginaList.stream().collect(Collectors.groupingBy(Region::getParentId, Collectors.toList()));//循环每个数据,从父类MAP中通过他的ID获取他的子类塞到children中reginaList.forEach(region -> addChildren(region, parentIdMap));//只筛选出最顶级数据List<Region> regions =reginaList.stream().filter(regina -> regina.getParentId().compareTo(BigInteger.ZERO) == 0).collect(Collectors.toList());private void addChildren(Region region, Map<BigInteger, List<Region>> parentIdMap) {List<Region> regions = parentIdMap.get(region.getId());if (regions != null) {region.setChildren(regions);regions.forEach(child -> addChildren(child, parentIdMap)); // 递归添加子级的子级}}

第二种写法:

        reginaList.stream().filter(city-> city.getParentId().compareTo(BigInteger.ZERO) == 0).peek(city -> city.setCityNames(getChildren(city,reginaList))).collect(Collectors.toList());public List<Region> getChildren(Region region, List<Region> regionList) {List<Region> childrens = regionList.stream().filter(re -> re.getParentId().compareTo(region.getId()) == 0).map(childRegion -> {childRegion.setAddressNames(getChildren(childRegion, regionList));return childRegion;}).collect(Collectors.toList());return childrens;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot多级多模块聚合项目下maven打包报‘packaging‘ with value ‘jar‘ is invalid.
  • 图书馆自助借书机怎么借书
  • Bash相关
  • Mysql安装(命令方式安装)
  • 基于深度学习的电动自行车头盔佩戴检测系统
  • 06-User Login
  • 一文搞懂从爬楼梯到最小花费(力扣70,746)
  • 语义分割交互式智能标注工具 | 澳鹏数据标注平台
  • LangChain - OpenGPTs
  • GO - 泛型编程
  • 深入浅出 -- 系统架构之负载均衡Nginx实现高可用
  • 面试算法-148-轮转数组
  • Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)
  • Springboot中JSCH的使用
  • RabbitMQ面经 手敲浓缩版
  • 时间复杂度分析经典问题——最大子序列和
  • [译]Python中的类属性与实例属性的区别
  • Angular数据绑定机制
  • axios 和 cookie 的那些事
  • ES6核心特性
  • golang中接口赋值与方法集
  • iOS编译提示和导航提示
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Redis中的lru算法实现
  • REST架构的思考
  • Vue小说阅读器(仿追书神器)
  • WebSocket使用
  • 初探 Vue 生命周期和钩子函数
  • 构造函数(constructor)与原型链(prototype)关系
  • 技术胖1-4季视频复习— (看视频笔记)
  • 近期前端发展计划
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 巧用 TypeScript (一)
  • 入手阿里云新服务器的部署NODE
  •  一套莫尔斯电报听写、翻译系统
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ${factoryList }后面有空格不影响
  • (160)时序收敛--->(10)时序收敛十
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (蓝桥杯每日一题)love
  • (三)docker:Dockerfile构建容器运行jar包
  • (推荐)叮当——中文语音对话机器人
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转) ns2/nam与nam实现相关的文件
  • (转)scrum常见工具列表
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Framework杂记