文档章节

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

JavaSon712
 JavaSon712
发布于 2017/07/22 08:12
字数 184
阅读 4
收藏 0
点赞 0
评论 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
博文 120
码字总数 23136
作品 0
延安
程序员
树形结构的数据库表Schema设计

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

Sub ⋅ 2013/03/25 ⋅ 2

树形结构的数据库表Schema设计

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

jiyayun ⋅ 2013/10/22 ⋅ 0

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

  再谈采用加载XML文件的形式组转通讯报文,通过类似EL表示的方式赋值,补充foreach

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

零下三度 ⋅ 2014/04/22 ⋅ 0

企业级应用中统一配置模块的设计

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

IBMdW ⋅ 2011/06/17 ⋅ 0

异常是怎么捕获的?

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

anycmd ⋅ 2014/11/14 ⋅ 1

浏览器渲染过程与性能优化

大家都知道万维网的应用层使用了协议,并且用浏览器作为入口访问网络上的资源。用户在使用浏览器访问一个网站时需要先通过协议向服务器发送请求,之后服务器返回文件与响应信息。这时,浏览器...

SylvanasSun ⋅ 2017/10/04 ⋅ 0

基于ITIL的运维系统(3)——CI说明

定义 配置项CI是MA2.0的核心概念之一,它将IT基础框架中所有的元素都抽象为同一种对象,通过CI之间的各种关联关系,画出业务服务的网络拓扑图。 服务器设备、机房场地、应用软件、合同、和业...

银月光海 ⋅ 2013/12/10 ⋅ 0

文档型数据库设计模式-如何存储树形数据

在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系。在传统的关系型数据库中,就已经产生了各种解决方案。 此文以存储树形结构数据为需求,分别描述了利...

索隆 ⋅ 2012/09/12 ⋅ 0

复杂XML的解析及组装

在实际的项目中,IPhone应用程序会存在很多与服务器之间的数据交互的地方,XML是首选方案。 此包可以解决XML文件的解析、对象转化为XML字符串的问题。 1 通过调用解析类,可以将XML的DATA数据...

junwong ⋅ 2012/03/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 31分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 35分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 40分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 41分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 52分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部