java tree 树形数据 递归 组装

"[" +
"{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;

    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值