public static List<Map<String, Object>> buildTree(List<Map<String, Object>> list) {
List<Map<String, Object>> roots = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> parents = new ArrayList<Map<String, Object>>();
for (Map<String, Object> s : list) {
if (StringUtils.isBlank(StringUtils.objToString(s
.get("node_father")))) {
parents.add(s);
}
}
list.removeAll(parents);
Map<String, Object> map;
Map<String, Object> attr;
for (Map<String, Object> s : parents) {
map = new LinkedHashMap<String, Object>();
map.put("id", s.get("code"));
map.put("text", s.get("name"));
attr = new HashMap<String, Object>();
attr.put("id", s.get("id"));
map.put("attributes", attr);
addTreeChilds(map, list);
roots.add(map);
}
return roots;
}
private static void addTreeChilds(Map<String, Object> parent, List<Map<String, Object>> list) {
List<Map<String, Object>> childs = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> cs = new ArrayList<Map<String, Object>>();
for (Map<String, Object> s : list) {
if (parent.get("id").equals(s.get("node_father"))) {
cs.add(s);
}
}
list.removeAll(cs);
if (cs.size() > 0) {
Map<String, Object> map;
Map<String, Object> attr;
for (Map<String, Object> s : cs) {
if (parent.get("id").equals(s.get("node_father"))) {
map = new LinkedHashMap<String, Object>();
map.put("id", s.get("code"));
map.put("text", s.get("name"));
attr = new HashMap<String, Object>();
attr.put("id", s.get("id"));
map.put("attributes", attr);
addTreeChilds(map, list);
childs.add(map);
}
}
parent.put("state", "closed");
parent.put("children", childs);
}
}
测试数据源为 :
package cn.net.sunkee.lwframe.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestUtils {
public static void main(String[] args) {
List<Map<String, Object>> sources = getInitList();
}
public static List<Map<String, Object>> getInitList() {
List<Map<String, Object>> sources = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 1);
map.put("code", "0001");
map.put("name", "目录1");
map.put("node_father", "");
sources.add(map);
map = new HashMap<String, Object>();
map.put("id", 2);
map.put("code", "00010001");
map.put("name", "目录2");
map.put("node_father", "0001");
sources.add(map);
map = new HashMap<String, Object>();
map.put("id", 3);
map.put("code", "00010002");
map.put("name", "目录2");
map.put("node_father", "0001");
sources.add(map);
map = new HashMap<String, Object>();
map.put("id", 4);
map.put("code", "000100010001");
map.put("name", "目录2");
map.put("node_father", "00010001");
sources.add(map);
return sources;
}
}