java减轻数据库压力_(原创)父子关系数据递归加工成tree形数据(减轻数据库压力)...

package test;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

/**

* IdPIdDatasToTree

*

Author : td

*

Date : 2016年9月30日下午4:54:59

*

Desc : 将上下级数据加工成为tree形数据结构

* @param response

* @param request

*/

public class IdPIdDatasToTree {

public static void main(String[] args) {

List < Map < String, Object >> list = new ArrayList < Map < String, Object >> ();

Map < String, Object > m = null;

for (int i = 1; i < 10; i++) {

m = new HashMap < String, Object > ();

m.put("id", i + "");

m.put("name", "我是节点" + i);

m.put("parentId", i - 1 + "");

list.add(m);

}

List < Map < String, Object >> treeMenuList = new LinkedList < Map < String, Object >> ();

treeMenuList = treeMenuList(list, treeMenuList, "0");

System.out.println("要加工的数据为:" + list.toString());

System.out.println("加工好的tree状结构为:" + treeMenuList.toString());

}

/**

*

* @param menuList 原始数据

* @param treeMenuList tree数据对象

* @param parentId 数据的父id

* @return

*/

@SuppressWarnings("unchecked")

public static List < Map < String, Object >> treeMenuList(List < Map < String, Object >> list, List < Map < String, Object >> treeMenuList, String parentId) {

//没有根节点情况下

if ("0".equals(parentId)) {

treeMenuList = getChildNodeList("0", list);

for (Map < String, Object > treeMenu: treeMenuList) {

String id = (String) treeMenu.get("id");

treeMenu.put("childNode", getChildNodeList(id, list));

treeMenuList(list, treeMenuList, id);

}

} else {

for (Map < String, Object > treeMenu: treeMenuList) {

//判断是否有子元素,有的话递归子元素 继续判断

String id = (String) treeMenu.get("id");

if (treeMenu.containsKey("childNode")) {

//获取子元素

List < Map < String, Object >> childNodeList = (List < Map < String, Object >> ) treeMenu.get("childNode");

if (childNodeList != null && childNodeList.size() > 0) {

for (Map < String, Object > tMenu: childNodeList) {

treeMenuList(list, childNodeList, tMenu.get("id").toString());

}

}

//如果没有子元素,根据id查询儿子 将儿子赋值

} else {

List < Map < String, Object >> chList = getChildNodeList(id, list);

if (null != chList) {

treeMenu.put("childNode", chList);

treeMenuList(list, chList, id);

}

}

}

}

return treeMenuList;

}

/**

*

* @param parentId 数据父id

* @param list 原始数据

* @return

*/

public static List < Map < String, Object >> getChildNodeList(String parentId, List < Map < String, Object >> list) {

List < Map < String, Object >> childNodeList = new LinkedList < Map < String, Object >> ();

for (Map < String, Object > childNode: list) {

//从新new 对象 (如果不重新new对象,list 的值会随之变动,不知道咋回事?)

Map < String, Object > m = new HashMap < String, Object > ();

m.putAll(childNode);

String pId = (String) childNode.get("parentId");

if (pId.equals(parentId)) {

childNodeList.add(m);

}

}

if (childNodeList.size() == 0) return null;

return childNodeList;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值