java中把树转成list_java将list转为树形结构的方法

这篇博客介绍如何在Java中将具有pid和id属性的JSON数据转换为树形结构,展示了listToTree方法的实现,以及如何利用该方法处理示例数据,将原始的省级和市级数据转化为树状结构。
摘要由CSDN通过智能技术生成

原始数据如下

[

{

"name":"甘肃省",

"pid":0,

"id":1

},

{

"name":"天水市",

"pid":1,

"id":2

},

{

"name":"秦州区",

"pid":2,

"id":3

},

{

"name":"北京市",

"pid":0,

"id":4

},

{

"name":"昌平区",

"pid":4,

"id":5

}

]

现需要是使用java将以上数据转为树形结构,转化后下的结构如下

[

{

"children":[

{

"children":[

{

"name":"秦州区",

"pid":2,

"id":3

}

],

"name":"天水市",

"pid":1,

"id":2

}

],

"name":"甘肃省",

"pid":0,

"id":1

},

{

"children":[

{

"name":"昌平区",

"pid":4,

"id":5

}

],

"name":"北京市",

"pid":0,

"id":4

}

]

代码如下

/**

* listToTree

*

方法说明

* 将JSONArray数组转为树状结构

* @param arr 需要转化的数据

* @param id 数据唯一的标识键值

* @param pid 父id唯一标识键值

* @param child 子节点键值

* @return JSONArray

*/

public static JSONArray listToTree(JSONArray arr,String id,String pid,String child){

JSONArray r = new JSONArray();

JSONObject hash = new JSONObject();

//将数组转为Object的形式,key为数组中的id

for(int i=0;i

JSONObject json = (JSONObject) arr.get(i);

hash.put(json.getString(id), json);

}

//遍历结果集

for(int j=0;j

//单条记录

JSONObject aVal = (JSONObject) arr.get(j);

//在hash中取出key为单条记录中pid的值

JSONObject hashVP = (JSONObject) hash.get(aVal.get(pid).toString());

//如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中

if(hashVP!=null){

//检查是否有child属性

if(hashVP.get(child)!=null){

JSONArray ch = (JSONArray) hashVP.get(child);

ch.add(aVal);

hashVP.put(child, ch);

}else{

JSONArray ch = new JSONArray();

ch.add(aVal);

hashVP.put(child, ch);

}

}else{

r.add(aVal);

}

}

return r;

}

测试代码如下

public static void main(String[] args){

List> data = new ArrayList<>();

Map map = new HashMap<>();

map.put("id",1);

map.put("pid",0);

map.put("name","甘肃省");

data.add(map);

Map map2 = new HashMap<>();

map2.put("id",2);

map2.put("pid",1);

map2.put("name","天水市");

data.add(map2);

Map map3 = new HashMap<>();

map3.put("id",3);

map3.put("pid",2);

map3.put("name","秦州区");

data.add(map3);

Map map4 = new HashMap<>();

map4.put("id",4);

map4.put("pid",0);

map4.put("name","北京市");

data.add(map4);

Map map5 = new HashMap<>();

map5.put("id",5);

map5.put("pid",4);

map5.put("name","昌平区");

data.add(map5);

System.out.println(JSON.toJSONString(data));

JSONArray result = listToTree(JSONArray.parseArray(JSON.toJSONString(data)),"id","pid","children");

System.out.println(JSON.toJSONString(result));

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值