文档章节

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

JavaSon712
 JavaSon712
发布于 2017/07/22 08:12
字数 184
阅读 6
收藏 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
粉丝 10
博文 148
码字总数 25363
作品 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
  再谈采用加载XML文件的形式组转通讯报文,通过类似EL表示的方式赋值,补充foreach

我的上一篇博客园【 采用加载XML文件的形式组转通讯报文,通过类似EL表示的方式赋值】能够解决绝大部分报文组装功能,但是有一种情况,它不能适用,就是当组装响应报文是,是查询某个表的前n...

零下三度
2014/04/22
0
0
企业级应用中统一配置模块的设计

简介: 在企业级应用的开发和运行中,配置数据是必不可少的。在以往的应用中,配置数据往往以许多不同方式保存,比 如:文件、注册表以及数据库等。对配置数据的松散管理造成了在应用系统运行...

IBMdW
2011/06/17
353
0

没有更多内容

加载失败,请刷新页面

加载更多

深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间。是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题。豪车一般配备两种钥匙:主钥匙和泊...

xtof
24分钟前
1
0
Linux学习-0920

3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令 一、usermode命令 usermode作用是用来修改用户信息。 方法: usermod 参数 username 示例1:修改用户uid usermod -u 1010 test5 示例2...

wxy丶
34分钟前
1
0
synchronized锁对象的坑

今天本来写点其他东西,碰巧写了一下synchronized,没想到掉坑里面了,大佬别笑。 起初代码大概是这样的: package com.ripplechan.part_1_2_3;import java.util.concurrent.CountDownL...

RippleChan
37分钟前
1
0
XAMPP环境搭建(Apache + MariaDB + PHP + Perl)

operation system:ubuntu-18.04.1 step1:download XAMPP #sudo wget https://www.apachefriends.org/xampp-files/7.2.9/xampp-linux-x64-7.2.9-0-installer.run step2:install XAMPP #sudo ......

硅谷课堂
39分钟前
0
0
关于获取3DS MAX中的蒙皮数据 3DSMAX C++API的应用

目的是为OSG做自定义的导出插件. 记录取得数据的方法. Max在代码中会提供一个INode对象. 从这个对象里取出各种数据. getSkin这个函数取出了ISkin修改器 下面这个函数一样是用于学习, 把数据输...

洛克人杰洛
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部