文档章节

组装树形结构循环寻找父子关系速度过慢的一种解决方案

JavaSon712
 JavaSon712
发布于 2017/07/22 08:12
字数 184
阅读 7
收藏 0

提前循环一遍所有节点,将父子关系保持在map里

	public String buildUserDistrictTree(List<EypArea> districts){
		
		//三级
		Map<String, List<EypArea>>  map=new HashMap<String, List<EypArea>>();
		for(EypArea eypArea : districts){
			if (map.get(eypArea.getParentId())!=null) {
				map.get(eypArea.getParentId()).add(eypArea);
			}else {
				map.put(eypArea.getParentId(), new ArrayList<EypArea>());
				map.get(eypArea.getParentId()).add(eypArea);
			}
		} 
		
		List<EypArea> roots=map.get("0");
		Collections.sort(roots, new Comparator<EypArea>(){
			@Override
			public int compare(EypArea o1, EypArea o2) {
				return o1.getId().compareTo(o2.getId());
			}

		});
		
		String tree=scmOrganizationService.buildDistrictsTreeWithCashMap(roots, map);
		return tree;
	}

public String buildDistrictsTreeWithCashMap(List<EypArea> rootList,Map<String, List<EypArea>> eypAreaMap){
		Stack<JSONObject> stack=new Stack<JSONObject>();
		JSONArray roots=JSONArray.fromObject(rootList);
		for (int i = 0; i < roots.size(); i++) {
			stack.push(roots.getJSONObject(i));
		}
		
		while (!stack.isEmpty()) {
			JSONObject parent=stack.pop();
			if (ParameterUtils.hasItem(eypAreaMap.get(parent.getString("id")))) {
				JSONArray jsonArray=JSONArray.fromObject(eypAreaMap.get(parent.getString("id")));
				parent.put("children", jsonArray);
				parent.put("spread", false);
				jsonArray=parent.getJSONArray("children");
				for (int i = 0; i < jsonArray.size(); i++) {
					stack.push(jsonArray.getJSONObject(i));
				}
			}
		}
		
		return roots.toString();
		
	}

© 著作权归作者所有

共有 人打赏支持
JavaSon712
粉丝 11
博文 170
码字总数 28408
作品 0
延安
程序员
私信 提问
树形结构的数据库表Schema设计

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数...

Sub
2013/03/25
0
2
树形结构的数据库表Schema设计

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数...

jiyayun
2013/10/22
0
1
oracle 层次查询语句

Oracle中层次查询语法: select ... [level | connect_by_root |connect_by_isleaf |connect_by_iscycle ] from table_name [where] connect by { prior col1=col2 | col1=prior col2 } [sta......

天黑顺路
2017/10/24
0
0
MySQL下实现树形组织机构图的一种方案【实际项目中已应用】

需求说明 前端树形组织机构图示意图 需求说明 前端要求画一个树形组织机构图,具体要求: 前端向后端传递参数为【登录用户所在组织机构id】,要求后端返回json数据,前端解析数据画出树形组织...

karma123
10/24
0
0
异常是怎么捕获的?

异常捕获可以想象成Actor模式。 一个线程是一个Actor,线程中运行的代码是栈结构,栈结构就是树形结构的。它的父子关系是先进去的是父,紧接着进去的是子,父的生命周期包含子的。栈里面的都...

anycmd
2014/11/14
206
1

没有更多内容

加载失败,请刷新页面

加载更多

CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
21分钟前
1
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
24分钟前
2
0
mac 下 mysql 8.0.13 安装并记录遇到的问题 以便以后查看

安装 官网mysql 下载地址 安装过程 省去 安装好之后 下载navicat 错误1 链接 遇到 mysql 2003 - Can't connect to MySQL server 错误, 解决方案 重启mysql 服务 #错误2 ERROR 1045: Acces...

杭州-IT攻城狮
昨天
5
0

中国龙-扬科
昨天
1
0
[Spring4.x]基于spring4.x纯注解的Web工程搭建

在前文中已经说明了如何基于 Spring4.x+ 版本开发纯注解的非web项目,链接如下: https://my.oschina.net/morpheusWB/blog/2985600 本文则主要说明,如何在Web项目中,"基于spring纯注解方式...

morpheusWB
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部