Java 8 中的 Stream 遍历树形结构

Java 8 中的 Stream 遍历树形结构

树形结构数据处理

public class TreeDemo {

    public static void main(String[] args) {
        testtree();
    }

    public static void testtree() {
        //模拟从数据库查询出来
        List 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 collect = menus.stream()
                // 获取父节点
                .filter(m -> m.getParentId() == 0)
                // 设置子节点
                .peek(m -> m.setChildList(getChildrens(m, menus)))
                .collect(Collectors.toList());

        System.out.println("-------转json输出结果-------");
        //System.out.println(collect);
        String jsonString = JSON.toJSONString(collect);
        System.out.println(jsonString);
    }

    /**
     * 递归查询子节点
     *
     * @param root 根节点
     * @param all  所有节点
     * @return 根节点信息
     */
    public static List getChildrens(Menu root, List all) {
        List children = all.stream()
                .filter(m -> Objects.equals(m.getParentId(), root.getId()))
                .peek((m) -> m.setChildList(getChildrens(m, all)))
                .collect(Collectors.toList());
        return children;
    }
}

Original: https://www.cnblogs.com/iforeverhz/p/16257908.html
Author: iforeverhz
Title: Java 8 中的 Stream 遍历树形结构

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583212/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux 时间操作及其同步

    本文将以 Arch Linux 为例,讨论 Linux 的时间操作和同步方法。 操作系统的时间 (clock) 由三或四部分决定: 时间值; 是否为 UTC 时间; 时区; (如果…

    Linux 2023年5月27日
    099
  • springboot系列十、springboot整合redis、多redis数据源配置

    一、简介 Redis 的数据库的整合在 java 里面提供的官方工具包:jedis,所以即便你现在使用的是 SpringBoot,那么也继续使用此开发包。 二、redidTempl…

    Linux 2023年5月28日
    0114
  • 进程

    理论知识 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重…

    Linux 2023年6月14日
    092
  • 意犹未尽的第2篇再次推出,继续讲解oracledb_exporter监控Oracle,一个入侵性极低的监控方案。

    写在开篇 基于上次的 oracledb_exporter监控Oracle,一个入侵性极低的监控方案 文章中,本篇继续讲解如下内容: 根据实际业务需求编写自定义监控指标,让其真正可以…

    Linux 2023年6月7日
    0101
  • 高级IPC DBus

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0106
  • redis的事件处理机制

    redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,”工作的工人”那么少,可那么为什么redi…

    Linux 2023年5月28日
    0108
  • linux inode 详解 / 线上inode爆满解决方案

    linux inode 详解 / 线上inode爆满解决方案 本文大量参考阮一峰大神博客,整理笔记 之所以&amp…

    Linux 2023年6月7日
    0112
  • 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(二)

    品优购项目(二) 1. 品优购首页布局 命名集合:名称 说明 快捷导航栏 shortcut 头部 header 标志 logo 购物车 shopcar 搜索 search 热点词 …

    Linux 2023年6月8日
    096
  • 4.7 Linux压缩文件或目录中文件为.bz2格式(bzip2命令)

    bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以”.b…

    Linux 2023年6月7日
    0116
  • c++的bind使用方法

    c++的bind使用方法 除了容器有适配器之外,其实函数也提供了适配器,适配器的特点就是将一个类型改装成为拥有子集功能的新的类型。其中函数的适配器典型的就是通过 std::bind…

    Linux 2023年6月14日
    092
  • 每天一个 HTTP 状态码 103

    103 Earyly Hints 是被用于在最终的 HTTP 消息前返回一些响应头… 103 Early Hints 103 Earyly Hints 是被用于在最终 …

    Linux 2023年6月7日
    0111
  • mycat数据库集群系列之mysql主从同步设置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大概包括以下内容:多数据库安装、mycat部署安…

    Linux 2023年6月14日
    099
  • lab 1

    int father[2],son[2]; int son[2]; if (fork() == 0) { int n; char buf[1]; close(0); dup(fat…

    Linux 2023年6月7日
    073
  • 01-MySQL连接查询、聚合函数

    1、连接查询 1.1、左连接 以左表为基准进行查询,左表数据回全部显示出来 右表中如果匹配连接条件的数据则显示相应字段的数据,如果不匹配,则显示为NULL 1.2、右连接 以右表为…

    Linux 2023年6月7日
    0127
  • MySQL Performance Schema详解

    MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况。 1 performance schema特…

    Linux 2023年6月13日
    097
  • redis用法分析

    redis也是一个内存非关系型数据库,它拥有memcache在数据存储上的全部优点,而且在memcache的基础上增加了数据持久性功能,redis用rdb和aof两种方式实现数据持…

    Linux 2023年5月28日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球