Java如何处理数据成为树状结构

 更新时间:2024年07月25日 16:57:13   作者:骑猪撞地球QAQ  
这篇文章主要介绍了Java如何处理数据成为树状结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java处理数据成为树状结构

如题所示,项目中需要将部分数据处理成为树状结构

实现过程

注:也可以使用sql达到该目的,但此处数据不多,故在代码中处理,主要是sql处理不是很会

	// 获取需要封装的数据
	List<Data> dataAll = service.findAll();
    if (CollUtil.isEmpty(dataAll)) {
      return new ArrayList<>();
    }
    // 获取顶层目录 项目中上级编码为空则为一级目录
    List<Data> parentList = dataAll.stream()
        .filter(item -> ObjectUtil.isEmpty(item.getParentNumber())).collect(Collectors.toList());

    // 获取下级目录,上级编码不为空则非一级目录
    List<Data> childList = dataAll.stream()
        .filter(item -> ObjectUtil.isNotEmpty(item.getParentNumber())).collect(Collectors.toList());

    // 封装树状结构
    return parentList.stream().map(item1 -> {
      Data chapterVo = new Data();
      BeanUtils.copyProperties(item1, chapterVo);
      List<Data> videoVoList = childList.stream()
          .filter(item2 -> item1.getBackgroundManagementCategoryNumber().equals(item2.getParentNumber()))
          .map(item3 -> {
            Data videoVo = new Data();
            BeanUtils.copyProperties(item3, videoVo);
            return videoVo;
          })
		  .collect(Collectors.toList());
      chapterVo.setChildren(videoVoList);
      return chapterVo;
    }).collect(Collectors.toList());

Java将查出来的数据拼树

递归方法构建树

/**
* 使用递归方法建树
* @param  menuTrees  子节点集合 / 返回的数据
* @return  List 
*/
public static List<Dept> buildByRecursive(List<Dept> menuTrees) {
    List<Dept> trees = new ArrayList<>();
    for (Dept menuTree : menuTrees) {
    	//查找根节点
        if (menuTree.getPcode() == null) {
         trees.add(findChildren(menuTree,menuTrees));
         }
    }
    return trees;
}
/**
 * 递归查找子节点
 * @param menuTree  菜单数对象
 * @param menuTrees  子节点
 * @return MenuTree
 */
private static Dept findChildren(Dept menuTree,List<Dept> menuTrees){
    for (Dept it : menuTrees) {
        if(menuTree.getCode().equals(it.getPcode())) {
            if (menuTree.getChildren() == null) {
             menuTree.setChildren(new ArrayList<>());
            }
            menuTree.getChildren().add(findChildren(it,menuTrees));
        }
    }
    return menuTree;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • javap命令的使用技巧

    javap命令的使用技巧

    本篇文章给大家分享了关于JAVA中关于javap命令的使用技巧以及相关代码分享,有需要的朋友参考学习下。
    2018-05-05
  • 关于Java大整数运算之BigInteger类

    关于Java大整数运算之BigInteger类

    这篇文章主要介绍了关于Java大整数运算之BigInteger类,BigInteger提供高精度整型数据类型及相关操作,所有操作中,都以二进制补码形式表示,需要的朋友可以参考下
    2023-05-05
  • Java数字签名算法DSA实例详解

    Java数字签名算法DSA实例详解

    这篇文章主要介绍了Java数字签名算法DSA,结合实例形式分析了Java数字签名算法DSA具体定义与使用技巧,需要的朋友可以参考下
    2018-05-05
  • 解决IDEA报错java无效的目标发行版:22

    解决IDEA报错java无效的目标发行版:22

    在使用IDEA编译项目时,可能会遇到JDK版本不一致的错误,这篇文章主要介绍了解决IDEA报错java无效的目标发行版:22的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • springboot启动feign项目报错:Service id not legal hostnam的解决

    springboot启动feign项目报错:Service id not legal hostnam的解决

    这篇文章主要介绍了springboot启动feign项目报错:Service id not legal hostnam的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 递归之斐波那契数列java的3种方法

    递归之斐波那契数列java的3种方法

    这篇文章主要为大家详细介绍了递归之斐波那契数列java的3种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java IO三大模型(BIO/NIO/AIO)的使用总结

    Java IO三大模型(BIO/NIO/AIO)的使用总结

    相信很多Java开发刚接触IO模型时,都会被「BIO、NIO、AIO」「同步、异步、阻塞、非阻塞」这些概念绕晕,下面就来详细的介绍一下 IO三大模型的使用,感兴趣的可以了解一下
    2026-02-02
  • SpringBoot如何IDEA中实现热部署

    SpringBoot如何IDEA中实现热部署

    这篇文章主要介绍了SpringBoot如何IDEA中实现热部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringMVC bean加载控制的实现分析

    SpringMVC bean加载控制的实现分析

    SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发
    2023-02-02
  • Java创建对象(显式创建和隐含创建)

    Java创建对象(显式创建和隐含创建)

    本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况,显式创建和隐含创建,,需要的朋友可以参考下面文章的具体内容
    2021-09-09

最新评论