首页 > 编程语言 >Java-根据父级id将List结构转Tree结构

Java-根据父级id将List结构转Tree结构

时间:2022-11-30 15:57:26浏览次数:43  
标签:Java stream 父级 list Tree private MenuVo List id

1. 方法一: List的stream()方法

public ResultData queryMenuList() {
   // 获取所有数据List
    List<MenuVo> list = MenuDao.queryMenuList();
   // 通过list.stream()将List结构转成Tree结构并返回
    List<MenuVo> collection = list.stream()
            .filter(o -> StrUtil.equals("-1", o.getPIdString()))
            .peek(o -> o.setChildList(getChildList(o, list)))
            .collect(Collectors.toList());
    return ResultData.success(Constants.QUERY_SUCCESS, collection, collection.size());
}
// 递归方法
private List<MenuVo> getChildList(MenuVo MenuVo, List<MenuVo> list) {
    return list.stream()
            .filter(o -> StrUtil.equals(String.valueOf(MenuVo.getIdString()), o.getPIdString()))
            .peek(o -> o.setChildList(getChildList(o, list)))
            .collect(Collectors.toList());
}

2. 方法二: mybatis映射

//实体类
@Data
public class Menu{
  // id
  private int id;
  // 菜单名称
  private String name;
  // 上级菜单id
  private int parentId;
  // 子集菜单列表
  private List<Menu> childList;
  
} 

// XML
<resultMap id="MenuMap" type="com.demo.study.entity.Menu">
    <result column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="parent_id" property="parentId"/>
    <collection column="id" property="childList"  select="queryMenuList"/>
</resultMap>

  <select id="queryMenuList" resultMap="MenuMap">
      select 
        *
      from 
        t_menu
      where 
        parent_id = #{id}
  </select>

 

标签:Java,stream,父级,list,Tree,private,MenuVo,List,id
From: https://www.cnblogs.com/Troy0912/p/16938665.html

相关文章

  • java项目中使用oshi搭建监控系统
    官网地址:​​https://github.com/oshi/oshi​​首先引入jar包<dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifact......
  • JAVA规定时间循环定时执行某个任务
    在我们做web项目的时候有些需求需要我们定时每周每天执行什么任务,这里给大家介绍一种方式,我就直接贴代码web.xml<listener><listener-class>com.hw.util.BeginRun......
  • [JavaScript] 自顶向下学习如何手写promise
    引子去年写了一篇有关promise的手写文章,写到一半发现自己的理解还不是很透彻,写的很烂,今年卷土重来,实现部分采用功能分解,目录跳转的形式呈现,力求最通俗易懂得剖析promise,我......
  • Java生成帮助文档
    在要生成帮助文档的目录下打开cmd   输入javadoc-encodingUTF-8-charrsetUTF-8要生成的Java文件  在生成的文件中打开index.html......
  • Java基础
    注释平时我们编写代码,在代码量很少时,我们还可以看懂自己写的,但当项目结构一旦复杂起来,我们就需要用到注释了注释并不会被执行,是给我们写代码的人看的书写注释是......
  • Java基础----内部类
    内部类分为1.成员内部类2.静态内部类3.局部内部类4.匿名内部类内部类概念:在一个类的内部再定义一个类特点:编译之后可以独立生成独立的字节码文件内部类可以......
  • java并发编程(二十二)-并发安全的基本概念
    类的线程安全定义  如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性内存的可见......
  • java并发编程(二十三)-并发安全之死锁
    死锁资源一定是多于1个,同时小于等于竞争的线程数,资源只有一个,只会产生激烈的竞争。死锁的根本成因:获取锁的顺序不一致导致。 死锁的一般情况:packagecom.caojiulu;importc......
  • java并发编程(一)-线程相关的基本概念
    CPU核心数和线程数的关系核心数:线程数=1:1intel引入超线程技术之后--》核心数:线程数=1:2CPU时间片轮转机制-又称RR调度 时间片轮转法(Round-Robin,RR)主要用于分时系统......
  • java并发编程(三)-线程的协作式
    怎么样才能让Java里的线程安全停止工作呢?一般来说:程序执行完或者抛出异常。怎么用代码的方式将线程停止呢?可以看到stop(),resume(),suspend()已不建议使用,stop()会导致线程......