递归算法将数据转换为树形结构

public class TT{

    /*
    * 初始化数据
    * [{"path":"0001","id":1,"text":"北京"},
    * {"path":"00010001","id":2,"text":"朝阳","parentId":1},
    * {"path":"00010002","id":3,"text":"海淀","parentId":1},
    * {"path":"00010003","id":4,"text":"西单","parentId":1},
    * {"path":"000100010001","id":5,"text":"朝阳子1","parentId":2},
    * {"path":"000100010002","id":6,"text":"朝阳子2","parentId":2},
    * {"path":"000100010003","id":7,"text":"朝阳子3","parentId":2},
    * {"path":"000100020001","id":8,"text":"海淀子1","parentId":3},
    * {"path":"000100020002","id":9,"text":"海淀子2","parentId":3}]
    * */
    public List<Map<String, Object>> getListData(){
        Map<String, Object> data1 = new HashMap<String, Object>();
        data1.put("id", 1);
        data1.put("parentId", null);
        data1.put("path", "0001");
        data1.put("text", "北京");

        Map<String, Object> data2 = new HashMap<String, Object>();
        data2.put("id", 2);
        data2.put("parentId", 1);
        data2.put("path", "00010001");
        data2.put("text", "朝阳");

        Map<String, Object> data3 = new HashMap<String, Object>();
        data3.put("id", 3);
        data3.put("parentId", 1);
        data3.put("path", "00010002");
        data3.put("text", "海淀");

        Map<String, Object> data4 = new HashMap<String, Object>();
        data4.put("id", 4);
        data4.put("parentId", 1);
        data4.put("path", "00010003");
        data4.put("text", "西单");

        Map<String, Object> data5 = new HashMap<String, Object>();
        data5.put("id", 5);
        data5.put("parentId", 2);
        data5.put("path", "000100010001");
        data5.put("text", "朝阳子1");

        Map<String, Object> data6 = new HashMap<String, Object>();
        data6.put("id", 6);
        data6.put("parentId", 2);
        data6.put("path", "000100010002");
        data6.put("text", "朝阳子2");

        Map<String, Object> data7 = new HashMap<String, Object>();
        data7.put("id", 7);
        data7.put("parentId", 2);
        data7.put("path", "000100010003");
        data7.put("text", "朝阳子3");

        Map<String, Object> data8 = new HashMap<String, Object>();
        data8.put("id", 8);
        data8.put("parentId", 3);
        data8.put("path", "000100020001");
        data8.put("text", "海淀子1");

        Map<String, Object> data9 = new HashMap<String, Object>();
        data9.put("id", 9);
        data9.put("parentId", 3);
        data9.put("path", "000100020002");
        data9.put("text", "海淀子2");

        List<Map<String, Object>> listData = new ArrayList<Map<String, Object>>();
        listData.add(data1);
        listData.add(data2);
        listData.add(data3);
        listData.add(data4);
        listData.add(data5);
        listData.add(data6);
        listData.add(data7);
        listData.add(data8);
        listData.add(data9);

        return listData;
    }

    @Test
    public void test1() throws Exception{

        List<Map<String, Object>> listData = getListData();

        List<Map<String, Object>> treeList = recursion(null, listData);

        System.out.println(treeList);

    }

    //递归获取树型结构数据
    public List<Map<String, Object>> recursion(Integer id, List<Map<String, Object>> listData) throws Exception{
        List<Map<String, Object>> treeList = new ArrayList<Map<String, Object>>();
        Iterator it = listData.iterator();
        while (it.hasNext()){
            Map<String, Object> map = (Map<String, Object>)it.next();
            if (map.get("parentId") == id){
                treeList.add(map);
                //使用Iterator,以便在迭代时把listData中已经添加到treeList的数据删除,迭代次数
                it.remove();
            }
        }
        for(Map<String, Object> map:treeList){
            map.put("childrenList", recursion((Integer)map.get("id"), listData));
        }
        return treeList;
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值