@[TOC](Java将list转换为tree,多层次业务需求)
1、这里用了两种方式实现了Java List转换为tree
2、这种方式基本上能够满足多层次用户的业务需求
package com;
/**
* @ClassName PersonTreeBuilder
* @Author ERIKSYANG
* @Date 2021/1/8
*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class PersonTreeBuilder {
/**
* realization of Two loop layers
* @param personTreeNodes list of incoming tree nodes
* @return trees
*/
public static List<PersonTreeNode> bulid(List<PersonTreeNode> personTreeNodes) {
List<PersonTreeNode> trees = new ArrayList<>();
for (PersonTreeNode node : personTreeNodes) {
//
if ( node.getParentId().compareTo(0L) == 0 ) {
trees.add(node);
}
for (PersonTreeNode nodeChild : personTreeNodes) {
if (nodeChild.getParentId().compareTo(node.getId()) == 0) {
if (node.getChildren() == null) {
node.setChildren( new ArrayList<>());
}
node.getChildren().add(nodeChild);
}
}
}
return trees;
}
/**
* use recursive method to build tree
* @param personTreeNodes list of incoming tree nodes
* @return trees
*/
public static List<PersonTreeNode> buildByRecursive(List<PersonTreeNode> personTreeNodes) {
List<PersonTreeNode> trees = new ArrayList<>();
for (PersonTreeNode node : personTreeNodes) {
if ( node.getParentId().compareTo(0L) == 0) {
trees.add(findChildren(node,personTreeNodes));
}
}
return trees;
}
/**
* recursively finding child nodes
* @param personTreeNode incoming tree node
* @param personTreeNodes List of incoming tree nodes
* @return personTreeNode
*/
public static PersonTreeNode findChildren(PersonTreeNode personTreeNode, List<PersonTreeNode> personTreeNodes) {
for (PersonTreeNode nodeChild : personTreeNodes) {
if(personTreeNode.getId().compareTo(nodeChild.getParentId()) == 0) {
if (personTreeNode.getChildren() == null) {
personTreeNode.setChildren( new ArrayList<>());
}
personTreeNode.getChildren().add(findChildren(nodeChild,personTreeNodes));
}
}
return personTreeNode;
}
static void test1(){
PersonTreeNode node1 = new PersonTreeNode( 1L, "爷爷", 0L);
PersonTreeNode node2 = new PersonTreeNode( 2L, "外公", 0L);
// PersonTreeNode node3 = new PersonTreeNode( 3L, "爸爸",node1);
// PersonTreeNode node4 = new PersonTreeNode( 4L, "二叔",node1);
// PersonTreeNode node5 = new PersonTreeNode( 5L, "三叔",node1);
// PersonTreeNode node6 = new PersonTreeNode( 6L, "弟弟",node3);
// PersonTreeNode node7 = new PersonTreeNode( 7L, "侄儿",node6);
// PersonTreeNode node8 = new PersonTreeNode( 8L, "妈妈",node2);
// PersonTreeNode node9 = new PersonTreeNode( 9L, "姨妈",node2);
// PersonTreeNode node10 = new PersonTreeNode( 10L, "我",node8);
// PersonTreeNode node11 = new PersonTreeNode( 11L, "儿子",node10);
PersonTreeNode node3 = new PersonTreeNode( 3L, "爸爸",1L);
PersonTreeNode node4 = new PersonTreeNode( 4L, "二叔",1L);
PersonTreeNode node5 = new PersonTreeNode( 5L, "三叔",1L);
PersonTreeNode node6 = new PersonTreeNode( 6L, "弟弟",3L);
PersonTreeNode node7 = new PersonTreeNode( 7L, "侄儿",6L);
PersonTreeNode node8 = new PersonTreeNode( 8L, "妈妈",2L);
PersonTreeNode node9 = new PersonTreeNode( 9L, "姨妈",2L);
PersonTreeNode node10 = new PersonTreeNode( 10L, "我",8L);
PersonTreeNode node11 = new PersonTreeNode( 11L, "儿子",10L);
List<PersonTreeNode> list = new ArrayList<>();
list.add(node1);
list.add(node2);
list.add(node3);
list.add(node4);
list.add(node5);
list.add(node6);
list.add(node7);
list.add(node8);
list.add(node9);
list.add(node10);
list.add(node11);
// String string = JSON.toJSONString(list, SerializerFeature.WriteMapNullValue);
String string = JSON.toJSONString(list);
System.out.println(string);
List<PersonTreeNode> forLoops = PersonTreeBuilder.bulid(list);
System.out.println(forLoops);
String s1 = JSON.toJSONString(forLoops);
System.out.println(s1);
// List<PersonTreeNode> recursives = PersonTreeBuilder.buildByRecursive(list);
// System.out.println(recursives);
// String s = JSON.toJSONString(recursives);
// System.out.println(s);
}
static void test2(){
// String s = "[{\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"id\":2,\"name\":\"外公\",\"parentId\":0},{\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"id\":5,\"name\":\"三叔\",\"parentId\":1},{\"id\":6,\"name\":\"弟弟\",\"parentId\":3},{\"id\":7,\"name\":\"侄儿\",\"parentId\":6},{\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"id\":9,\"name\":\"姨妈\",\"parentId\":2},{\"id\":10,\"name\":\"我\",\"parentId\":8},{\"id\":11,\"name\":\"儿子\",\"parentId\":10}]";
// String s = "[{\"children\":null,\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"children\":null,\"id\":2,\"name\":\"外公\",\"parentId\":0},{\"children\":null,\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"children\":null,\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"children\":null,\"id\":5,\"name\":\"三叔\",\"parentId\":1},{\"children\":null,\"id\":6,\"name\":\"弟弟\",\"parentId\":3},{\"children\":null,\"id\":7,\"name\":\"侄儿\",\"parentId\":6},{\"children\":null,\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"children\":null,\"id\":9,\"name\":\"姨妈\",\"parentId\":2},{\"children\":null,\"id\":10,\"name\":\"我\",\"parentId\":8},{\"children\":null,\"id\":11,\"name\":\"儿子\",\"parentId\":10}]";
String s = "[{\"children\":[{\"children\":[{\"children\":[{\"id\":7,\"name\":\"侄儿\",\"parentId\":6}],\"id\":6,\"name\":\"弟弟\",\"parentId\":3}],\"id\":3,\"name\":\"爸爸\",\"parentId\":1},{\"id\":4,\"name\":\"二叔\",\"parentId\":1},{\"id\":5,\"name\":\"三叔\",\"parentId\":1}],\"id\":1,\"name\":\"爷爷\",\"parentId\":0},{\"children\":[{\"children\":[{\"children\":[{\"id\":11,\"name\":\"儿子\",\"parentId\":10}],\"id\":10,\"name\":\"我\",\"parentId\":8}],\"id\":8,\"name\":\"妈妈\",\"parentId\":2},{\"id\":9,\"name\":\"姨妈\",\"parentId\":2}],\"id\":2,\"name\":\"外公\",\"parentId\":0}]";
JSONArray objects = JSON.parseArray(s);
System.out.println(objects);
List<PersonTreeNode> list = JSONObject.parseArray(s,PersonTreeNode.class);
System.out.println(list);
List<PersonTreeNode> forLoops = PersonTreeBuilder.bulid(list);
System.out.println(forLoops);
}
public static void main(String[] args) {
test1();
// test2();
}
}
/**
* @ClassName PersonTreeNode
* @Author ERIKSYANG
* @Date 2021/1/8
*/
class PersonTreeNode {
/**
* attribute
*/
private Long id;
private Long parentId;
private String name;
private List<PersonTreeNode> children;
/**
* constructor
*/
public PersonTreeNode() {
}
public PersonTreeNode(Long id, String name, Long parentId) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
public PersonTreeNode(Long id, String name, PersonTreeNode parent) {
this.id = id;
this.parentId = parent.getId();
this.name = name;
}
/**
* get and set
*/
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<PersonTreeNode> getChildren() {
return children;
}
public void setChildren(List<PersonTreeNode> children) {
this.children = children;
}
@Override
public String toString() {
return "PersonTreeNode{" +
"id=" + id +
", parentId=" + parentId +
", name='" + name + '\'' +
", children=" + children +
'}';
}
}