java流式计算 获取全量树形数据,非懒加载树,递归找儿

java 复制代码
	@Override
	public List<ConfServiceVO> allTree(ConfServiceVO confService) throws Exception {
		List<ConfServiceEntity> equClassifies = this.list();
		if (CollectionUtil.isEmpty(equClassifies)) {
			return new ArrayList<>();
		}
		List<ConfServiceVO> confServiceVOS = ConfServiceWrapper.build().listVO(equClassifies);
		// 整理非标准树
		List<ConfServiceVO> treeList = this.getTree(confServiceVOS);

		// 根据业务需求 ,可能需要获取某一个根节点下的叶子  正常情况可去掉
		if ( confService != null && confService.getId() != null) {
			// 遍历树,找到指定的根节点
			for (ConfServiceVO root : treeList) {
				if (root.getId().equals(confService.getId())) {
					// 返回指定根节点下的所有叶子
					return root.getChildren();
				}
			}
		}
		return treeList;
	}


	//自己写的树形结构  递归找儿
	private List<ConfServiceVO> getChildrenCategory(ConfServiceVO root,List<ConfServiceVO> all){
		List<ConfServiceVO> children = all.stream().filter(categoryEntity -> {

			return  categoryEntity.getParentId().equals(root.getId());

		}).map(categoryEntity -> {
			//找到了子分类并设置
			categoryEntity.setChildren(getChildrenCategory(categoryEntity,all));

			return categoryEntity;

		}).sorted((category1,category2) ->{
			return ( category1.getSno() == null ? 0: category1.getSno() ) -
					(category2.getSno() == null ? 0: category2.getSno() );
		}).collect(Collectors.toList());

		return children;

	}

	//传入树形结构list,返回树形
	public List<ConfServiceVO> getTree(List<ConfServiceVO> categoryList) throws Exception {

		List<ConfServiceVO> categoryTree = categoryList.stream().filter(categoryEntity -> {
			//过滤 返回一级分类
			return categoryEntity.getParentId().equals("0");

		}).map(category -> {
			//进行map映射 ,给每个分类进行子分类(用递归)
			List<ConfServiceVO> childrenCategory = getChildrenCategory(category, categoryList);
			category.setChildren(childrenCategory);


			return category;
		}).sorted((category1, category2) -> {
			return (category1.getSno() == null ? 0 : category1.getSno()) - (category2.getSno() == null ? 0 : category2.getSno());
		}).collect(Collectors.toList());

		return categoryTree;
	}

本文介绍了树形结构数据处理方法,包含三个核心方法:1) allTree方法获取完整树形数据,支持按指定根节点筛选子节点;2) getChildrenCategory递归查找子节点并排序;3) getTree构建完整树形结构,从一级节点开始逐层嵌套子节点。所有方法均按sno字段排序,处理了空值情况,实现了树形数据的层级组织和灵活查询功能。代码结构清晰,采用流式处理提高可读性。

相关推荐
Lin_Miao_093 分钟前
基于 DataX + DataX-Web 生成报表数据
java·数据库
MarkHD4 分钟前
智能体在车联网中的应用:第12天 CARLA实战:编写Python客户端生成与控制车辆,迈向联合仿真
开发语言·python
沉迷技术逻辑4 分钟前
微服务架构-网关
java·微服务·架构
青出于兰4 分钟前
C语言| 指针变量的自增运算
c语言·开发语言
xqqxqxxq6 分钟前
Java 集合框架核心用法与实战技术笔记
java·笔记·python
一起养小猫8 分钟前
LeetCode100天Day3-判断子序列与汇总区间
java·数据结构·算法·leetcode
有味道的男人8 分钟前
Python 爬虫框架设计:类封装与工程化实践
开发语言·爬虫·python
Davina_yu9 分钟前
R语言报错:无法打开文件‘sales_2025.txt‘: No such file or directory
开发语言·r语言
Rysxt_11 分钟前
Kotlin前景深度分析:市场占有、技术优势与未来展望
android·开发语言·kotlin
csbysj202012 分钟前
Bootstrap4 分页
开发语言