首页 > 编程语言 >Java 8 Stream实现菜单树工具类

Java 8 Stream实现菜单树工具类

时间:2022-12-08 16:02:11浏览次数:47  
标签:菜单 Java Stream Menu List id import new 节点


TreeUtils:

package com.ruoyi.common.core.utils.GuavaUtils.TreeUtils;

import com.alibaba.fastjson.JSON;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @ProjectName: trunk
* @Package: com.ruoyi.common.core.utils.GuavaUtils.TreeUtils
* @ClassName: TreeUtils
* @Author: lgn
* @Description:
* @Date: 2022/4/18 17:45
* @Version: 1.0
*/
public class TreeUtils {

/**
* @Method getMenu
* @Author lgn
* @Version 1.0
* @Description 组装树形菜单
* @Return
* @Exception
* @Date 2022/4/18
*/
private static List<Menu> getMenu(List<Menu> menusList) {
//组装树形菜单
List<Menu> collectList = menusList.stream().filter(m -> m.getParentId() == 0).map(
(m) -> {
m.setChildList(getChildrens(m, menusList));
return m;
}
).collect(Collectors.toList());//Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到List、Set、Map)。
return collectList;
}

/**
* 递归查询子节点
* @param root 根节点
* @param all 所有节点
* @return 根节点信息
*/
private 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;
}

public static void main(String[] args) {

List<Menu> menusList = 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> collectList= getMenu(menusList);

String jsonOutput= JSON.toJSONString(collectList);
System.out.println("转json输出结果:"+jsonOutput);
}

}

Menu VO类

package com.ruoyi.common.core.utils.GuavaUtils.TreeUtils;

import lombok.Builder;
import lombok.Data;

import java.util.List;

/**
* @ProjectName: trunk
* @Package: com.ruoyi.common.core.utils.GuavaUtils.TreeUtils
* @ClassName: Menu
* @Author: lgn
* @Description: 菜单类
* @Date: 2022/4/18 17:43
* @Version: 1.0
*/
@Data
@Builder
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;
}

public Menu(Integer id, String name, Integer parentId, List<Menu> childList) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.childList = childList;
}
}


标签:菜单,Java,Stream,Menu,List,id,import,new,节点
From: https://blog.51cto.com/u_15906694/5922616

相关文章

  • javascript-代码随想录训练营day15
    226.翻转二叉树题目链接:https://leetcode.cn/problems/invert-binary-tree/题目描述:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。输入:root=[4,2,7,......
  • 随笔(四)『Java多线程(创建线程方式)』
    1、创建线程方式一:『继承Thread类』/***创建线程方式一:『继承Thread类』*/publicclassThreadTest{publicstaticclassMyThreadextendsThread{......
  • Java单例模式的最佳实践?
    “读过书,……我便考你一考。茴香豆的茴字,怎样写的?”——鲁迅《孔乙己》0x00大纲目录0x00大纲0x01前言0x02单例的正确性new关键字clone方法克隆反序列化反射0x03最......
  • javascript-代码随想录训练营day14
    递归的三要素:递归函数的参数和返回值单层递归的逻辑终止条件144.二叉树的先序遍历题目链接:https://leetcode.cn/problems/binary-tree-preorder-traversal/题目描......
  • 同步导航菜单与路由,并在关闭标签(或浏览器)后重新时,维持离开时的路由
    简介PC端路由跳转除了各种点击事件外,还经常会通过前进后退键触发,此时,为了确保导航菜单与路由地址的同步关系,就需要在菜单点击事件的基础上,新增对路由的侦听。同时,若是希......
  • (java 实现开箱即用基于 redis 的分布式锁
    项目简介lock为java设计的分布式锁,开箱即用,纵享丝滑。开源地址:https://github.com/houbb/lock目的开箱即用,支持注解式和过程式调用基于redis的分布式锁内......
  • java 大文件分片上传处理
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......
  • Where is the “Father of Java?”
    Thisarticlewasoriginallypostedby ​​TylerHamilton​​ inthe ​​Toronto Star​​.Itisn’toftenthatweremembertheoriginatorsofideasandprod......
  • Java自学之路
    JAVA自学之路一:学会选择为了就业,不少同学参加各种各样的培训。 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机、嵌入式、游戏、3G、测试等。那么究竟应该选......
  • 使用JavaHTTPClient发送请求
    importorg.apache.http.Header;importorg.apache.http.HttpEntity;importorg.apache.http.HttpHeaders;importorg.apache.http.client.config.RequestConfig;impo......