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

相关推荐
2301_780789663 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T4 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
学长毕设4 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn5 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵5 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
秋天的怀念_David5 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1006 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
BIBI20496 小时前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践