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

相关推荐
HGW6895 分钟前
基于 Elasticsearch 实现地图点聚合
java·elasticsearch·高德地图
hi星尘25 分钟前
深度解析:Java内部类与外部类的交互机制
java·开发语言·交互
看到我,请让我去学习27 分钟前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
橘子编程27 分钟前
Python-Word文档、PPT、PDF以及Pillow处理图像详解
开发语言·python
wuxinyan12333 分钟前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试
清心歌40 分钟前
Java SE线程的创建
java
高兴达1 小时前
Spring boot入门工程
java·spring boot·后端
Ronin3051 小时前
【C++】类型转换
开发语言·c++
萧曵 丶1 小时前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
笑衬人心。1 小时前
HTTPS详解:原理 + 加解密过程 + 面试问答
java·网络协议·http·面试·https