实现步骤:
创建一个生成树的基类TreeNode;
package permission;
import java.util.ArrayList;
import java.util.List;
public class TreeNode {
private String id;
private String name;
private String desc;
private String pid;
private List<TreeNode> children;
public TreeNode() {
super();
}
public TreeNode(String id, String name, String desc, String pid) {
super();
this.id = id;
this.name = name;
this.desc = desc;
this.pid = pid;
this.children = new ArrayList<TreeNode>();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
}
测试类:
package permission;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
public class RecursiveTree {
public static void main(String[] args) {
TreeNode root = new TreeNode("1", "中国", "中国", "");
TreeNode node1 = new TreeNode("11", "北京", "北京", "1");
TreeNode node2 = new TreeNode("12", "上海", "上海", "1");
TreeNode node3 = new TreeNode("13", "山东", "山东", "1");
TreeNode node4 = new TreeNode("131", "潍坊", "潍坊", "13");
TreeNode node5 = new TreeNode("1311", "安丘", "安丘", "131");
TreeNode node6 = new TreeNode("111", "朝阳区", "朝阳区", "11");
List<TreeNode> nodes = new ArrayList<TreeNode>();
nodes.add(root);
nodes.add(node1);
nodes.add(node2);
nodes.add(node3);
nodes.add(node4);
nodes.add(node5);
nodes.add(node6);
System.out.println(switchNodeListToTree(nodes));
}
/**
* @author zheng
* 自动将节点数据转化为树结构
* @method switchNodeListToTree
* @param nodes
* @return
* @return String
* @date 2018年4月12日 上午9:33:01
*/
public static String switchNodeListToTree(List<TreeNode> nodes){
TreeNode root = getRoot(nodes);
root = recursive(root, nodes);
return JSON.toJSONString(root, true);
}
/**
* @author zheng
* 递归添加子节点
* @method recursive
* @param node
* @param nodes
* @return
* @return TreeNode
* @date 2018年4月12日 上午9:46:35
*/
public static TreeNode recursive(TreeNode rootNode,List<TreeNode> nodes){
for(TreeNode treeNode :nodes){
if(treeNode.getPid().equals(rootNode.getId())){
rootNode.getChildren().add(treeNode);
recursive(treeNode, nodes);
}
}
return rootNode;
}
public static TreeNode getRoot(List<TreeNode> nodes){
TreeNode root = null;
if(nodes != null && nodes.size() > 0){
for (TreeNode treeNode : nodes) {
if(treeNode.getPid().endsWith("")){
root = treeNode;
break;
}
}
}
return root;
}
}
转换json时候用到的工具类,maven
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>: