在项目开发中, 经常会使用到树状结构, 树状结构基本就是有父子关系的, 通过后台的逻辑, 处理成
{id: ‘’, title: ‘’, children: []}
这样放到前台使用树的一些相关js就可以直接展示了, 前台无需在进行复杂的操作. 下面就是java后台的相关代码.
可以直接使用, 如果前台需要的参数不符合, 修改一下即可:
public Object treeList(String id) {
List<Map> clazzList = new ArrayList<>();
// 根据节点查询所有子级数据
clazzList = service.getTreeList(id);
Map<String, Map> clazzMap = new HashMap<>();
// 先把所有数据处理成前台树需要的格式 (title, children……), 存到map里
for (Map item : clazzList) {
Map map = (Map) JSON.parse(JSON.toJSONString(item));
map.put("title", item.get("title"));
map.put("children", new ArrayList<>());
clazzMap.put(item.get("id").toString(), map);
}
List clazzTree = new ArrayList();
// 对所有数据进行分组, 看是否为同一级的
for (Map item : clazzList) {
// 判断刚map里的key(id)是否与原数据的父id相同, 相同则进入它下级, 不同则单独一级(当前即根节点)
if (clazzMap.containsKey(item.get("parent_id"))) {
Map row = clazzMap.get(item.get("id"));//row是Map形式的它自己
List children = (List)clazzMap.get(item.get("parent_id")).get("children");//获取它父亲的“儿子表”
// row.put("type", "1");//它的类型是1,证明是儿子
row.put("id", item.get("id"));
children.add(row);
} else {
// 根节点
Map row = clazzMap.get(item.get("id"));
// row.put("type","0");//类型是0,证明是父亲
row.put("id", item.get("id"));
clazzTree.add(row);//父亲的集合
}
}
return clazzTree;
}