list集合转树形结构

源数据格式:

[{
"children": [],
"hasChild": 1,
"pid": 0,
"id": 1,
"text": "北京"
}, {
"children": [],
"hasChild": 1,
"pid": 1,
"id": 2,
"text": "纳什空间"
}, {
"children": [],
"hasChild": 0,
"pid": 2,
"id": 3,
"text": "测试机2号"
}, {
"children": [],
"hasChild": 1,
"pid": 1,
"id": 4,
"text": "富士康-廊坊"
}, {
"children": [],
"hasChild": 0,
"pid": 2,
"id": 5,
"text": "测试机1号"
}, {
"children": [],
"hasChild": 0,
"pid": 4,
"id": 6,
"text": "SMT线1"
}, {
"children": [],
"hasChild": 0,
"pid": 4,
"id": 7,
"text": "SMT线2"
}

]

转成树形结构之后的数据为:

[{
"children": [{
"children": [{
"children": [],
"hasChild": 0,
"id": 3,
"pid": 2,
"text": "测试机2号"
}, {
"children": [],
"hasChild": 0,
"id": 5,
"pid": 2,
"text": "测试机1号"
}
],
"hasChild": 1,
"id": 2,
"pid": 1,
"text": "纳什空间"
}, {
"children": [{
"children": [],
"hasChild": 0,
"id": 6,
"pid": 4,
"text": "SMT线1"
}, {
"children": [],
"hasChild": 0,
"id": 7,
"pid": 4,
"text": "SMT线2"
}
],
"hasChild": 1,
"id": 4,
"pid": 1,
"text": "富士康-廊坊"
}
],
"hasChild": 1,
"id": 1,
"pid": 0,
"text": "北京"
}

]

下面是思路:

第一步:首先需要建一个bean类,这里的iconCls和state为扩展字段,也可以根据自己的业务具体扩展开发;

TreeJson implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private Integer pid;
private String text;
private String iconCls;
private String state;
private int hasChild;

private List<TreeJson> children;

}

第二步:就是将数据库查询出的集合赋值给TreeJson 这个工具类。每条数据库记录都是一个新的TreeJson 对象,在第三步的时候用到的将是TreeJson 的集合,不是数据库查询出的list集合。

第三步:格式化TreeJson 集合;

    1、遍历List<TreeJson> 以id为key,TreeJson对象为value的Map<TreeJson.ID,TreeJson> map;

    2、再一次遍历List<TreeJson>,如果TreeJson  tj没有父级,则直接将该TreeJson对象放到List<TreeJson> tree中去,如果有父级,则从map中获取父级的对象 并将该TreeJson  tj 添加到children集合中;

到此整个流程介绍完了,下面贴第三步的代码:


原理:在遍历TreeJson集合的时候,已经改变当前的属性值了,由于对象的地址不变,里面的属性再怎么改变也是这个对象的属性。

具体的测试源码请走传送门https://download.csdn.net/download/qq_35131811/10471936

因为本人也是小白,所以也缺积分去下载一些学习资料,所以还请施舍两积分下载源码

猜你喜欢

转载自blog.csdn.net/qq_35131811/article/details/80651182