Java遞歸處理Tree樹結構
package cn.pconline;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description Tree樹結構數據組裝
* @Author jie.zhao
* @Date 2019/12/27 15:10
*/
public class TestTree {
public static void main(String[] args) {
//假數據
List<Map<String, Object>> dataList = new ArrayList<>();
dataList.add(new HashMap<String, Object>() {{
put("id", "1");
put("pid", "");
put("name", "公司根節點");
}});
dataList.add(new HashMap<String, Object>() {{
put("id", "2");
put("pid", "1");
put("name", "部門1");
}});
dataList.add(new HashMap<String, Object>() {{
put("id", "3");
put("pid", "1");
put("name", "部門2");
}});
dataList.add(new HashMap<String, Object>() {{
put("id", "4");
put("pid", "2");
put("name", "部門1小組1");
}});
dataList.add(new HashMap<String, Object>() {{
put("id", "5");
put("pid", "3");
put("name", "部門2小組1");
}});
//dataList為假數據,正常數據庫查詢所有數據。。。
List<Map<String, Object>> treeList = doTreeList(dataList, "");
System.out.println(JSON.toJSONString(treeList));
//輸出
/*
[{"children":[{"children":[{"children":[],"name":"部門1小組1","pid":"2","id":"4"}],"name":"部門1","pid":"1","id":"2"},
{"children":[{"children":[],"name":"部門2小組1","pid":"3","id":"5"}],
"name":"部門2","pid":"1","id":"3"}],"name":"公司根節點","pid":"","id":"1"}]
*/
}
//遞歸tree樹
public static List<Map<String, Object>> doTreeList(List<Map<String, Object>> dataList, String pid) {
List<Map<String, Object>> resultList = new ArrayList<>();
if (dataList != null) {
for (Map<String, Object> item : dataList) {
if (pid.equals(item.get("pid").toString())) {
List<Map<String, Object>> children = doTreeList(dataList, item.get("id").toString());
item.put("children", children);
resultList.add(item);
}
}
}
return resultList;
}
}