java 8 stream api将List<T>转换成树形结构

1、新建实体类

package com.example.springboot3.entity;import lombok.Builder;
import lombok.Data;import java.util.List;@Data
@Builder
public class Menu {/*** id*/public Integer id;/*** 名称*/public String name;/*** 父id ,根节点为0*/public Integer parentId;/*** 子节点信息*/public List<Menu> children;public Menu(Integer id, String name, Integer parentId) {this.id = id;this.name = name;this.parentId = parentId;}public Menu(Integer id, String name, Integer parentId, List<Menu> children) {this.id = id;this.name = name;this.parentId = parentId;this.children = children;}
}

2、controller测试,正式环境可到service进行分层

package com.example.springboot3.controller;import com.example.springboot3.entity.Menu;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;@RestController
public class MenuController {@GetMapping("/getMenuTree")public List<Menu> getMenuTree(){//模拟从数据库查询出来List<Menu> menus = Arrays.asList(new Menu(1,"根节点",0),new Menu(2,"子节点1",1),new Menu(3,"子节点1.1",2),new Menu(4,"子节点1.2",2),new Menu(5,"根节点1.3",2),new Menu(6,"根节点2",1),new Menu(7,"根节点2.1",6),new Menu(8,"根节点2.2",6),new Menu(9,"根节点2.2.1",7),new Menu(10,"根节点2.2.2",7),new Menu(11,"根节点3",1),new Menu(12,"根节点3.1",11));//获取父节点List<Menu> collect = menus.stream().filter(m -> m.getParentId() == 0).map((m) -> {m.setChildren(getChildrens(m, menus));return m;}).collect(Collectors.toList());return collect;}private List<Menu> getChildrens(Menu root, List<Menu> all) {List<Menu> children = all.stream().filter(m ->Objects.equals(m.getParentId(), root.getId())).map((m) -> {m.setChildren(getChildrens(m, all));return m;}).collect(Collectors.toList());return children;}}

3、结果

在这里插入图片描述

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

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

相关文章

项目资源管理——降本增效(上)

什么是项目资源 一切具有使用价值&#xff0c;可为项目接受和利用&#xff0c;且属于项目发展过程所需要的客观存在的资源。 包括实物资源和团队资源&#xff08;人力资源&#xff09;。 项目资源管理的主要目的是确保项目所需的资源得到有效的规划、分配和控制&#xff0c;以支…

RocketMQ 流数据库解析:如何实现一体化流处理?

作者&#xff1a;林清山&#xff08;隆基&#xff09; 前言&#xff1a; 从初代开源消息队列崛起&#xff0c;到 PC 互联网、移动互联网爆发式发展&#xff0c;再到如今 IoT、云计算、云原生引领了新的技术趋势&#xff0c;消息中间件的发展已经走过了 30 多个年头。 目前&a…

MPDataDoc类介绍

MPDataDoc类介绍 使用mp数据库新接口mp_api.client.MPRester获取数据&#xff0c;例子如下&#xff1a; from mp_api.client import MPResterwith MPRester(API_KEY) as mpr:docs mpr.summary.search(material_ids["mp-1176451", "mp-561113"])以上代码返…

C++进阶--使用哈希表实现unordered_map和unordered_set的原理与实例

本文将介绍如何使用哈希表来实现C STL库中的unordered_map和unordered_set容器。我们将会解释哈希表的基本原理&#xff0c;并给出具体的代码示例&#xff0c;帮助读者更好地理解和应用哈希表。 哈希原理讲解–链接入口 set和map的实现的文章&#xff0c;与unordered_map实现类…

代码随想录 Day59 单调栈

42接雨水问题&#xff0c;很巧妙&#xff0c;我一开始的思路是需要两个单调栈&#xff0c;一个是递增&#xff0c;一个是递减&#xff0c;分别遍历&#xff0c;从而得到当前方块的与两边的高度差&#xff0c;但是看过卡哥的思路&#xff0c;就会明白其实另一次的比较已经在入栈…

利用AI技术预测未被充分监测的流域中的极端洪水事件笔记

利用人工智能&#xff08;AI&#xff09;技术预测未被充分监测的流域&#xff08;ungauged watersheds&#xff09;中的极端洪水事件 文章目录 利用人工智能&#xff08;AI&#xff09;技术预测未被充分监测的流域&#xff08;ungauged watersheds&#xff09;中的极端洪水事件…

初学者怎么学习Python?Python学习从什么开始?

学习Python&#xff0c;可以先从Python爬虫开始哈 首选&#xff0c;爬虫并不是网上传言的那样&#xff0c;动不动就面向铁窗编程等&#xff0c;正规的爬虫还是相当有市场的&#xff01;&#xff01;&#xff01; 而 Python 作为入门简易的语言&#xff0c;语法也相当简洁&…

Linux-2 Linux的权限

目录 1.什么是权限&#xff1f; 2.权限的本质 3.Linux中的用户 普通用户与root用户相互转换 普通用户不变root&#xff0c;以root身份执行一个命令 LInux中的角色 4.Linux文件的权限 5.快速掌握修改权限的做法 修改权限 6.对比权限有无表现 对于普通用户&#xf…

1+x中级题目练习复盘(20220625 1+X 中级理论考试)

Override 用于标注重写方法 函数式接口是指有且只有一个抽象方法的接口&#xff1b;

DP背包模型

目录 采药&#xff08;01背包&#xff09;代码实现 装箱问题&#xff08;01背包&#xff09;代码实现 *宠物小精灵之收服&#xff08;二维费用01背包&#xff09;题目分析代码实现 数字组合&#xff08;01背包&#xff09;代码实现 买书&#xff08;完全背包&#xff09;代码实…

Chrome 插件 tabs API 解析

Chrome.tabs API 解析 使用 chrome.tabs API 与浏览器的标签页系统进行交互&#xff0c;可以使用此 API 在浏览器中创建、修改和重新排列标签页 Tabs API 不仅提供操作和管理标签页的功能&#xff0c;还可以检测标签页的语言、截取屏幕截图&#xff0c;以及与标签页的内容脚本…

linux之zabbix自定义监控

zabbix基本配置见&#xff1a;写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/136783672 自定义监控规则 命令为who | wc -l 显示为2&#xff0c;主机一个&#xff0c;mobaxterm一个&#xff0c;思路是开启3个终端&#xff0c;让主机的zabbix服务自动检测1…