Java List<Map<String, Object>>生成树

来源:互联网 发布:数据质量责任追究制度 编辑:程序博客网 时间:2024/06/05 02:08
/** * * @param list 所有元素的平级集合,map包含id和pid * @param pid 顶级节点的pid,可以为null * @param idName id位的名称,一般为id或者code * @return 树 */public static List<Map<String, Object>> getTree(List<Map<String, Object>> list, String pid, String idName) {    List<Map<String, Object>> res = new ArrayList<Map<String,Object>>();    if (CollectionUtils.isNotEmpty(list))        for (Map<String, Object> map : list) {            if(pid == null && map.get("p"+idName) == null || map.get("p"+idName) != null && map.get("p"+idName).equals(pid)){                String id = (String) map.get(idName);                map.put("children", getTree(list, id, idName));                res.add(map);            }        }    return res;}


测试代码:

List<String> pcodes = new ArrayList<>();pcodes.add(null);List<Map<String, Object>> list = new ArrayList<>();for (int i = 0, len = 10; i < len; i++){    Map<String, Object> map = new HashedMap();    map.put("code", "code" + i);    map.put("name", "name" + i);    map.put("pcode", pcodes.get(0));    pcodes.add("code" + i);    Collections.shuffle(pcodes);    list.add(map);}System.out.println(CommonUtils.getTree(list, null, "code"));


输出结果:

[    {        pcode=null,        code=code0,        name=name0,        children=[            {                pcode=code0,                code=code1,                name=name1,                children=[                    {                        pcode=code1,                        code=code4,                        name=name4,                        children=[                                                    ]                    },                    {                        pcode=code1,                        code=code5,                        name=name5,                        children=[                                                    ]                    }                ]            }        ]    },    {        pcode=null,        code=code2,        name=name2,        children=[            {                pcode=code2,                code=code6,                name=name6,                children=[                    {                        pcode=code6,                        code=code7,                        name=name7,                        children=[                                                    ]                    },                    {                        pcode=code6,                        code=code8,                        name=name8,                        children=[                            {                                pcode=code8,                                code=code9,                                name=name9,                                children=[                                                                    ]                            }                        ]                    }                ]            }        ]    },    {        pcode=null,        code=code3,        name=name3,        children=[                    ]    }]



0 0