"[" +
"{id: 7,name:'佘山', pid:2}," +
"{id: 8,name:'九亭', pid: 2}," +
"{id: 9,name:'松江南站', pid: 2}," +
"{id: 13,name:'汶水路', pid:4}," +
"{id: 14,name:'延长路', pid:4}," +
"{id: 15,name:'富锦路', pid: 4}," +
"{id: 5,name:'赤峰路', pid:1}," +
"{id: 6,name:'友谊路',pid: 1}," +
"{id: 10,name:'海伦路', pid: 3}," +
"{id: 11,name:'浦东大道', pid: 3}," +
"{id: 12,name:'临平路', pid: 3}," +
"{id: 13,name:'临平路4', pid: 12}," +
"{id: 4,neme:'二号线'}," +
"{id: 1,name:'三号线情'}," +
"{id: 2,name:'九号线'}," +
"{id: 3,name:'四号线'}" +
"]";
组装这样的数据成树状数据一般都是使用递归来操作:
public class Test{
public List<Record> threeData() {
String j = "[" +
"{id: 7,name:'佘山', pid:2}," +
"{id: 8,name:'九亭', pid: 2}," +
"{id: 9,name:'松江南站', pid: 2}," +
"{id: 13,name:'汶水路', pid:4}," +
"{id: 14,name:'延长路', pid:4}," +
"{id: 15,name:'富锦路', pid: 4}," +
"{id: 5,name:'赤峰路', pid:1}," +
"{id: 6,name:'友谊路',pid: 1}," +
"{id: 10,name:'海伦路', pid: 3}," +
"{id: 11,name:'浦东大道', pid: 3}," +
"{id: 12,name:'临平路', pid: 3}," +
"{id: 13,name:'临平路4', pid: 12}," +
"{id: 4,neme:'二号线'}," +
"{id: 1,name:'三号线情'}," +
"{id: 2,name:'九号线'}," +
"{id: 3,name:'四号线'}" +
"]";
List<Record> srclist = new ArrayList();
List<Record> list = JSONObject.parseArray(j,Record.class);
//第一步使用迭代器组装第一层没有pid的数据
Iterator lt = list.listIterator();
while (lt.hasNext()){
Record res = (Record)lt.next();
if(res.getPid() == null){
srclist.add(res);
//删除没有pid的顶级数据方便递归
lt.remove();
}
}
//递归组装子集
class A{
void recursionData(List<Record> srclist){
for(int x=0;x<srclist.size();x++){
List<Record> ress = new ArrayList<>();
for(int a=0;a<list.size();a++){
if(list.get(a).getPid().equals(srclist.get(x).getId())){
ress.add(list.get(a));
}
}
//此处往子集集合赋值
srclist.get(x).setChild(ress);
//递归调用
recursionData(ress);
}
}
}
new A().recursionData(srclist);
System.out.println(srclist);
return srclist;
}
}