import java.util.List;
public class Node {
/**
* 当前节点
*/
private String id;
/**
* 当前名称
*/
private String nm;
/**
* 父节点
*/
private String pid;
/**
* 子节点集合
*/
private List<Node> sn;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNm() {
return nm;
}
public void setNm(String nm) {
this.nm = nm;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<Node> getSn() {
return sn;
}
public void setSn(List<Node> sn) {
this.sn = sn;
}
@Override
public String toString() {
return "Node{" +
"id='" + id + '\'' +
", nm='" + nm + '\'' +
", pid='" + pid + '\'' +
", sn=" + sn +
'}';
}
}
@Test
public void testLineTypeTraslateTree(){
String jsonStr = "[{\"id\":\"1\",\"pid\":\"0\",\"nm\":\"水果\"},{\"id\":\"11\",\"pid\":\"1\",\"nm\":\"苹果\"}," +
"{\"id\":\"12\",\"pid\":\"1\",\"nm\":\"橘子\"},{\"id\":\"111\",\"pid\":\"11\",\"nm\":\"富士山品牌\"}]";
JSONArray jsonArray = JSONArray.fromObject(jsonStr);
List<Node> nodes = JSONArray.toList(jsonArray, Node.class);
System.out.println(nodes.toString());
int len = nodes.size(), i = 0, j = 0;
Map<String, Node> nodeMap = new HashMap<String, Node>(len);
for (; i < len; i++) {
nodeMap.put(nodes.get(i).getId(), nodes.get(i));
}
List<Node> result = new ArrayList<Node>(len);
for (; j < len; j++) {
Node curNode = nodes.get(j), parentNode = nodeMap.get(curNode.getPid());
if (parentNode == null) {
result.add(curNode);
} else {
if (parentNode.getSn() == null) {
parentNode.setSn(new ArrayList<Node>());
}
parentNode.getSn().add(curNode);
}
}
System.out.println(result);
}