1、数据结构
id 主键
pId 关联Id
name 节点名称
level 节点级别
2、标准数据类型
标准的 JSON 数据需要嵌套表示节点的父子包含关系
数据结构:
var nodes = [
{name: "父节点1", children: [
{name: "子节点1"},
{name: "子节点2"}
]}
];
// 获取标准JSON数据
public static List<Map<String, Object>> getStandardJSON() {
// 根据不同框架获取对应的List数据
List<Map<String, Object>> queryList = query.find();
List<Map<String, Object>> parentList = Lists.newArrayList();
for (Map<String, Object> map : queryList) {
if (map.get("pId").equals("0")) {
parentList.add(map);
}
}
recursionChildren(parentList, queryList);
return parentList;
}
// 递归获取子节点数据
public static void recursionChildren (List<Map<String, Object>> parentList,
List<Map<String, Object>> allList) {
for (Map<String, Object> parentMap : parentList) {
List<Map<String, Object>> childrenList = Lists.newArrayList();
for (Map<String, Object> allMap : allList) {
if (allMap.get("pId").equals(parentMap.get("id"))) {
childrenList.add(allMap);
}
}
if (!ParamValidUtils.isEmpty(childrenList)) {
parentMap.put("children", childrenList);
recursionChildren(childrenList, allList);
}
}
}
3、简单数据类型
简单模式的 JSON 数据需要使用 id / pId 表示节点的父子包含关系
数据结构:
var nodes = [
{id:1, pId:0, name: "父节点1"},
{id:11, pId:1, name: "子节点1"},
{id:12, pId:1, name: "子节点2"}
];
// 获取简单JSON数据
public static List<Map<String, Object>> getSimpleJSON() {
// 根据不同框架获取对应的List数据
List<Map<String, Object>> queryList = query.find();
List<Map<String, Object>> parentList = Lists.newArrayList();
for (Map<String, Object> map : queryList) {
if (map.get("pId").equals("0")) {
parentList.add(map);
}
}
List<Map<String, Object>> returnList = Lists.newArrayList();
for (Map<String, Object> parentMap : parentList) {
recursionChildren(parentMap, queryList, returnList);
}
return returnList;
}
// 递归获取子节点
public static void recursionChildren(Map<String, Object> parentMap,
List<Map<String, Object>> allList, List<Map<String, Object>> returnList) {
returnList.add(parentMap);
for (Map<String, Object> allMap : allList) {
if (allMap.get("pId").equals(parentMap.get("id"))) {
returnList.add(allMap);
test(allMap, allList, returnList);
}
}
}
4、优化