组装树形结构循环寻找父子关系速度过慢的一种解决方案
组装树形结构循环寻找父子关系速度过慢的一种解决方案
JavaSon712 发表于6个月前
组装树形结构循环寻找父子关系速度过慢的一种解决方案
  • 发表于 6个月前
  • 阅读 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();
		
	}
标签: Java
共有 人打赏支持
粉丝 6
博文 96
码字总数 22080
×
JavaSon712
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: