递归
需要返回的数据类型
{
"name":"江西",
"id":1,
"children":[
{
"name":"南昌",
"id":1000,
"children":[
{
"name":"青山湖区",
"id":10001
},
{
"name":"高新区",
"id":10002
}
]
},
{
"name":"九江",
"id":1001
},
{
"name":"赣州",
"id":1002
}
]
}
能获得的数据类型
| id | name | pid |childrennum|
代码
@Override
public Map<String, Object> selectUnitTree(Map<String, Object> param) throws Exception {
List<Map<String, Object>> list = this.getDao().queryForList("HJSF_COMMON.selectPT_DM_ZZJG_ZTREE", param);
if (CollectionUtils.isEmpty(list)) {
return new HashMap<>();
}
//单位上级id为key,value为下级的集合
Map<String, List<Map>> listToMapBySjzzjgdm = listToMapList(list, "pid");
//单位id为key,value为单位信息
Map<String, Map<String, Object>> listToMapByZzjgdm = list.stream().collect(Collectors.toMap(s -> (String) s.get("id"), s -> s));
//找到跟登录单位一致的那个记录,定为树根
Map<String, Object> loginZzjgdmMap = listToMapByZzjgdm.get((String) param.get("id"));
if (MapUtils.isEmpty(loginZzjgdmMap)) {
return new HashMap<>();
}
Map<String, Object> resultMap = getResultMap((String) param.get("id"), listToMapBySjzzjgdm, listToMapByZzjgdm);
return resultMap;
}
private Map<String, Object> getResultMap(String id, Map<String, List<Map>> listToMapBySjzzjgdm, Map<String, Map<String, Object>> listToMapByZzjgdm) {
Map<String, Object> resultMap = new HashMap<>();
//拿出需要操作的根节点
Map<String, Object> map = listToMapByZzjgdm.get(id);
//此节点是否存在
if (MapUtils.isEmpty(map)) {
return resultMap;
}
resultMap.put("name", (String) map.get("name"));
resultMap.put("id", (String) map.get("id"));
//此节点不是叶子节点,则增加一个children列表
List<Map> childernMapList = new ArrayList<Map>();
if (!"0".equals(((BigDecimal)map.get("childrennum")).toString())) {
List<Map> list = listToMapBySjzzjgdm.get((String) map.get("id"));
if(CollectionUtils.isEmpty(list)){
return resultMap;
}
for (Map map1:list) {
//是否有children
if (resultMap.containsKey("children")) {
childernMapList = (List<Map>) resultMap.get("children");
}
childernMapList.add(getResultMap((String) map1.get("id"), listToMapBySjzzjgdm, listToMapByZzjgdm));
}
resultMap.put("children", childernMapList);
}
return resultMap;
}
private Map<String, List<Map>> listToMapList(List<Map<String, Object>> list, String key) {
//按模板类型项目Map
Map<String, List<Map>> itemMap = new HashMap<String, List<Map>>();
if (CollectionUtils.isNotEmpty(list)) {
for (Map item : list) {
// map中存在该key
if (itemMap.containsKey(item.get(key))) {
// 根据key取出list
List<Map> tempList = itemMap.get(item.get(key));
// 添加元素
tempList.add(item);
// 将集合put回map中 此步骤也可以不写
itemMap.put((String) item.get(key), tempList);
} else {
// map中不存在该key 直接newList
List<Map> tempList = new ArrayList<Map>();
// 添加元素
tempList.add(item);
// 将集合put到map中
itemMap.put((String) item.get(key), tempList);
}
}
}
return itemMap;
}