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字段排序,处理了空值情况,实现了树形数据的层级组织和灵活查询功能。代码结构清晰,采用流式处理提高可读性。

相关推荐
鹿角片ljp3 小时前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法
aramae4 小时前
模拟实现strcmp()(C语言)
c语言·开发语言·后端
泡海椒5 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
Beyond_System|系统之外5 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
景熙55236 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
wno7046 小时前
Spring Security权限控制
java·python·spring
杨运交7 小时前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow7 小时前
CountDownLatch in Java
java
SL_staff8 小时前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品