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

相关推荐
kimnoic2 分钟前
Python操作xlwings的实例详解
开发语言·python
萧瑟余晖4 分钟前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
泡茶喝茶写代码14 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 17 篇):创新高与新低扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
栗子~~24 分钟前
java - logstash-logback-encoder 集成 demo
java·开发语言·logback
报错小能手25 分钟前
Channel面试题。Sync面试题
linux·服务器·windows
hmb↑36 分钟前
高并发与高可用技术经验
java·spring
闭着眼刷牙41 分钟前
pc接入rndis等网卡设备后卡死几分钟,已解决
windows
楚识科技1 小时前
XML配置OCR接入实战:自定义OCR模板从字段定义到API调用全流程
xml·java·ocr
ESDWAN1 小时前
跨境网络频繁掉线怎么排查?从企业内网到 SD-WAN 链路的故障诊断
开发语言·网络·php
程序员zgh1 小时前
C++ erase() 函数用法
c语言·开发语言·c++·学习