java树结构stream工具类的示例代码详解

 更新时间:2022年03月17日 16:48:15   作者:非ban必选  
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。今天通过本文重点给大家介绍java树结构stream工具类的示例代码,感兴趣的朋友一起看看吧

菜单实体类

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

生成树结构工具类

package com.example.demo.util;
 
import cn.hutool.json.JSONUtil;
import com.example.demo.entity.Menu;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class TreeUtil {
    /**
     * 递归查询子节点
     *
     * @param root 根节点
     * @param all  所有节点
     * @return 根节点信息
     */
    public static List<Menu> getChildrens(Menu root, List<Menu> all) {
        List<Menu> children = all.stream().filter(m -> {
            return Objects.equals(m.getParentId(), root.getId());
        }).map(
                (m) -> {
                    m.setChildList(getChildrens(m, all));
                    return m;
                }
        ).collect(Collectors.toList());
        return children;
    }
     * @param parentId 父节点id
     * @param menus 菜单集合
     * @return 返回id等于parentId的子孙节点树结构 (不包含id等于parentId的节点)
    public static List<Menu> getTree(Integer parentId, List<Menu> menus) {
        //获取父节点
        List<Menu> tree = menus.stream().filter(m -> Objects.equals(parentId,m.getParentId())).map(
                    m.setChildList(getChildrens(m, menus));
        return tree;
    public static void main(String... args) {
        //模拟从数据库查询出来
        List<Menu> menus = Arrays.asList(
                new Menu(1, "0-1", 0),
                new Menu(2, "0-1-2", 1),
                new Menu(3, "0-1-2-3", 2),
                new Menu(4, "0-1-2-4", 2),
                new Menu(5, "0-1-2-5", 2),
                new Menu(6, "0-6", 0),
                new Menu(7, "0-6-7", 6),
                new Menu(8, "0-6-8", 6),
                new Menu(9, "0-6-7-9", 7),
                new Menu(10, "0-6-7-10", 7),
                new Menu(11, "0-11", 0),
                new Menu(12, "0-11-12", 11)
        );
        List<Menu> tree = getTree(1,menus);
        System.out.println("-------转json输出结果-------");
        System.out.println(JSONUtil.parseArray(tree).toString());
}

到此这篇关于java树结构stream工具类的文章就介绍到这了,更多相关java树结构工具类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Swagger3.0 整合spring boot2.7x避免swagger2.0与boot2.7冲突问题

    Swagger3.0 整合spring boot2.7x避免swagger2.0与boot2.7冲突

    这篇文章主要介绍了Swagger3.0 整合spring boot2.7x避免swagger2.0与boot2.7冲突问题,通过注释掉2.0引入的俩包,直接引入3.0,文中结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-10-10
  • 深入了解Java定时器中的Timer的原理

    深入了解Java定时器中的Timer的原理

    这篇文章主要介绍了Java定时器中的Timer的原理。Timer主要用于Java线程里指定时间或周期运行任务,它是线程安全的,但不提供实时性(real-time)保证。接下来就跟随小编一起深入了解Timer吧
    2022-01-01
  • Java基础之颜色工具类(超详细注释)

    Java基础之颜色工具类(超详细注释)

    这篇文章主要介绍了Java基础之颜色工具类(超详细注释),文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring中@Autowired自动注入map详解

    Spring中@Autowired自动注入map详解

    这篇文章主要介绍了Spring中@Autowired自动注入map详解,  spring是支持基于接口实现类的直接注入的,支持注入map,list等集合中,不用做其他的配置,直接注入,需要的朋友可以参考下
    2023-10-10
  • SpringBoot生成jar/war包的布局应用

    SpringBoot生成jar/war包的布局应用

    在 Spring Boot 中,"布局应用"(Application Layout)指的是打包生成的可执行 jar 或 war 文件中的内容组织结构,本文给大家介绍了SpringBoot生成jar/war包的布局应用,需要的朋友可以参考下
    2024-02-02
  • java mybatis框架实现多表关系查询功能

    java mybatis框架实现多表关系查询功能

    这篇文章主要介绍了java mybatis框架实现多表关系查询,基于Maven框架的整体设计 —— 一多一的关系,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Java实现七牛云文件图片上传下载

    Java实现七牛云文件图片上传下载

    本文主要介绍了Java实现七牛云文件图片上传下载,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java并发之synchronized实现原理深入理解

    Java并发之synchronized实现原理深入理解

    这篇文章主要介绍了Java中synchronized实现原理详解,涉及synchronized实现同步的基础,Java对象头,Monitor,Mark Word,锁优化,自旋锁等相关内容,具有一定借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 自定义spring mvc的json视图实现思路解析

    自定义spring mvc的json视图实现思路解析

    这篇文章主要介绍了自定义spring mvc的json视图的实现思路解析,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 利用JavaFX工具构建Reactive系统

    利用JavaFX工具构建Reactive系统

    这篇文章主要介绍了使用JavaFX构建Reactive系统,利用JavaFX工具集中的新的超棒特性来构建响应式的快速应用程序,感兴趣的小伙伴们可以参考一下
    2016-02-02

最新评论