java list 转树 tree 的三种写法
List对象数组转为tree
代码是自己写的,今天学习来的。下一步,写成工具类。
pom里面加上:阿里的fastjson
-
<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
-
<dependency>
-
<groupId>net.sf.json-lib</groupId>
-
<artifactId>json-lib</artifactId>
-
<version>2.4</version>
-
</dependency>
-
import com.alibaba.fastjson.JSON;
-
import java.util.ArrayList;
-
import java.util.List;
-
/**
-
* <p></p>
-
*
-
* @package: com.tree
-
* @class: TreeNode1
-
* @date: 2018/3/27
-
* @author: jcroad(caoyajing @ yunmel.com)
-
* @since 1.0
-
*/
-
public class TreeNode {
-
private Integer id;
-
private Integer pid;
-
private String name;
-
private List<TreeNode> children;
-
TreeNode(Integer id, Integer pid, String name) {
-
this.id = id;
-
this.pid = pid;
-
this.name = name;
-
}
-
public Integer getId() {
-
return id;
-
}
-
public void setId(Integer id) {
-
this.id = id;
-
}
-
public Integer getPid() {
-
return pid;
-
}
-
public void setPid(Integer pid) {
-
this.pid = pid;
-
}
-
public String getName() {
-
return name;
-
}
-
public void setName(String name) {
-
this.name = name;
-
}
-
public List<TreeNode> getChildren() {
-
return children;
-
}
-
public void setChildren(List<TreeNode> children) {
-
this.children = children;
-
}
-
public static void main(String[] args) {
-
List<TreeNode> list = new ArrayList<TreeNode>();
-
list.add(new TreeNode(1, 0, "1"));
-
list.add(new TreeNode(2, 0, "2"));
-
list.add(new TreeNode(3, 2, "3"));
-
list.add(new TreeNode(4, 3, "4"));
-
list.add(new TreeNode(5, 4, "5"));
-
list.add(new TreeNode(6, 5, "6"));
-
List<TreeNode> treeList = new ArrayList<TreeNode>();
-
List<TreeNode> treeList1 = new ArrayList<TreeNode>();
-
List<TreeNode> treeList2 = new ArrayList<TreeNode>();
-
List<TreeNode> treeList3 = new ArrayList<TreeNode>();
-
//方法一、
-
treeList = listGetStree(list);
-
treeList1 = listToTree(list);
-
treeList2 = toTree(list);
-
System.out.println(JSON.toJSONString(treeList));
-
System.out.println(JSON.toJSONString(treeList1));
-
System.out.println(JSON.toJSONString(treeList2));
-
}
-
private static List<TreeNode> listGetStree(List<TreeNode> list) {
-
List<TreeNode> treeList = new ArrayList<TreeNode>();
-
for (TreeNode tree : list) {
-
//找到根
-
if (tree.getPid() == 0) {
-
treeList.add(tree);
-
}
-
//找到子
-
for (TreeNode treeNode : list) {
-
if (treeNode.getPid() == tree.getId()) {
-
if (tree.getChildren() == null) {
-
tree.setChildren(new ArrayList<TreeNode>());
-
}
-
tree.getChildren().add(treeNode);
-
}
-
}
-
}
-
return treeList;
-
}
-
/**
-
* 方法二、
-
* @param list
-
* @return
-
*/
-
public static List<TreeNode> listToTree(List<TreeNode> list) {
-
//用递归找子。
-
List<TreeNode> treeList = new ArrayList<TreeNode>();
-
for (TreeNode tree : list) {
-
if (tree.getPid() == 0) {
-
treeList.add(findChildren(tree, list));
-
}
-
}
-
return treeList;
-
}
-
private static TreeNode findChildren(TreeNode tree, List<TreeNode> list) {
-
for (TreeNode node : list) {
-
if (node.getPid() == tree.getId()) {
-
if (tree.getChildren() == null) {
-
tree.setChildren(new ArrayList<TreeNode>());
-
}
-
tree.getChildren().add(findChildren(node, list));
-
}
-
}
-
return tree;
-
}
-
/**
-
*方法三
-
* @param list
-
* @return
-
*/
-
private static List<TreeNode> toTree(List<TreeNode> list) {
-
List<TreeNode> treeList = new ArrayList<TreeNode>();
-
for (TreeNode tree : list) {
-
if(tree.getPid() == 0){
-
treeList.add(tree);
-
}
-
}
-
for (TreeNode tree : list) {
-
toTreeChildren(treeList,tree);
-
}
-
return treeList;
-
}
-
private static void toTreeChildren(List<TreeNode> treeList, TreeNode tree) {
-
for (TreeNode node : treeList) {
-
if(tree.getPid() == node.getId()){
-
if(node.getChildren() == null){
-
node.setChildren(new ArrayList<TreeNode>());
-
}
-
node.getChildren().add(tree);
-
}
-
if(node.getChildren() != null){
-
toTreeChildren(node.getChildren(),tree);
-
}
-
}
-
}
-
}