根据网上一些资料整理而成。
1、树节点定义
import java.util.ArrayList;
import java.util.List;public class TreeEntity {
//private TreeEntity parent; //父节点对象
private int id; //节点id
private int pid; //父节点id
private Object data; //节点数据
private List<TreeEntity>childs=null; //子节点
public TreeEntity(int id, int pid, Object data){
this.id = id;
this.pid = pid;
this.data = data;
this.childs = null;
}
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public int getPid() { return pid; }
public void setPid(int pid) { this.pid = pid; }
public Object getData() { return data; }
public void setData(Object data) { this.data = data; }
public List<TreeEntity> getChilds() {
if (childs==null) childs = new ArrayList<TreeEntity>();
return childs; }
public void setChilds(List<TreeEntity> childs) { this.childs = childs; }
}
2、json树构建
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import hs.cdn.bean.TreeEntity;
import ms.core.tool.JsonTool;
public class JsonTree {
//方法一:递归构建json树,返回的roots即为结果
public static void buildTree(int parentId, List<TreeEntity> list, List<TreeEntity> roots){
for(TreeEntity node: list){
if(node.getPid()==parentId){
roots.add(node);
buildTree(node.getId(), list, node.getChilds());
}
}
}
private static Map<Integer,TreeEntity> listToTreeMap(List<TreeEntity> list, int root){
//list 转 map
Map<Integer, TreeEntity> map = new HashMap<Integer, TreeEntity>();
for(TreeEntity node: list) {
map.put(node.getId(), node);
}
Iterator<TreeEntity> iter = map.values().iterator();
while(iter.hasNext()){
TreeEntity node = iter.next();
if(node.getPid()==root) continue;
TreeEntity parentNode = map.get(node.getPid());
if(parentNode != null){
parentNode.getChilds().add(node);
}
}
return map;
}
//方法二:借助Map完成
public static List<TreeEntity> buildTree(List<TreeEntity> list, int root){
if(list.size()<=0) return null;
Map<Integer, TreeEntity> map = listToTreeMap(list, root);
if(map.size() == 0) return null;
List<TreeEntity> roots = new ArrayList<TreeEntity>();
Iterator<TreeEntity> iter = map.values().iterator();
while(iter.hasNext()){
TreeEntity treeNode = iter.next();
if(treeNode.getPid()==root){
roots.add(treeNode);
}
}
return roots;
}
public static void main(String[] args) {
List<TreeEntity> list = new ArrayList<TreeEntity>(); //需要转换处理数据
List<TreeEntity> rets = new ArrayList<TreeEntity>(); //返回最终结果集
list.add(new TreeEntity(1,0,"一级目录1"));
list.add(new TreeEntity(2,0,"一级目录2"));
list.add(new TreeEntity(3,1,"一级目录内容:11"));
list.add(new TreeEntity(4,0,"一级目录3"));
list.add(new TreeEntity(5,1,"一级目录内容:12"));
list.add(new TreeEntity(6,1,"一级目录内容:13"));
list.add(new TreeEntity(7,2,"一级目录内容:21"));
list.add(new TreeEntity(8,4,"一级目录内容:31"));
list.add(new TreeEntity(9,2,"二级目录21"));
//method 1
buildTree(0,list,rets);
System.out.println(JsonTool.listBeanToJson(rets));
//method 2
List<TreeEntity> listEx = new ArrayList<TreeEntity>(); //需要转换处理数据
listEx.add(new TreeEntity(1,0,"一级目录1"));
listEx.add(new TreeEntity(2,0,"一级目录2"));
listEx.add(new TreeEntity(3,1,"一级目录内容:11"));
listEx.add(new TreeEntity(4,0,"一级目录3"));
listEx.add(new TreeEntity(5,1,"一级目录内容:12"));
listEx.add(new TreeEntity(6,1,"一级目录内容:13"));
listEx.add(new TreeEntity(7,2,"一级目录内容:21"));
listEx.add(new TreeEntity(8,4,"一级目录内容:31"));
listEx.add(new TreeEntity(9,2,"二级目录21"));
List<TreeEntity> retEx = buildTree(listEx, 0);
System.out.println(JsonTool.listBeanToJson(retEx));
}
}
3、输出结果
{
"childs":[
{
"childs":[
],
"data":"一级目录内容:11",
"id":3,
"pid":1
},
{
"childs":[
],
"data":"一级目录内容:12",
"id":5,
"pid":1
},
{
"childs":[
],
"data":"一级目录内容:13",
"id":6,
"pid":1
}
],
"data":"一级目录1",
"id":1,
"pid":0
},
{
"childs":[
{
"childs":[
],
"data":"一级目录内容:21",
"id":7,
"pid":2
},
{
"childs":[
],
"data":"二级目录21",
"id":9,
"pid":2
}
],
"data":"一级目录2",
"id":2,
"pid":0
},
{
"childs":[
{
"childs":[
],
"data":"一级目录内容:31",
"id":8,
"pid":4
}
],
"data":"一级目录3",
"id":4,
"pid":0
}
]