源数据格式:
[{
"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.youkuaiyun.com/download/qq_35131811/10471936
因为本人也是小白,所以也缺积分去下载一些学习资料,所以还请施舍两积分下载源码