/**
*
* @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=[
]
}
]