JAVA代码如何将一个list转换为树形结构呢?
下文笔者讲述list转树形结构的方法分享,如下所示
实现思路:
只需遍历Node节点
分别设置其children属性,即可实现树形结构的效果
例:
//定义 实体对象
@Data
public class Node {
private Integer id;
private String city;
private Integer pid;
private List<Node> children;
public Node(Integer id,String city,Integer pid){
this.id = id;
this.city = city;
this.pid = pid;
}
}
//编写转换工具类
public class TreeUtils {
//把一个List转成树
static List<Node> buildTree(List<Node> list,Integer pid){
List<Node> tree=new ArrayList<>();
for(Node node:list){
if(Objects.equals(node.getPid(),pid)){
tree.add(findChild(node,list));
}
}
return tree;
}
static Node findChild(Node node, List<Node> list){
for(Node n:list){
if(Objects.equals(n.getPid(),node.getId())){
if(node.getChildren() == null){
node.setChildren(new ArrayList<Node>());
}
node.getChildren().add(findChild(n,list));
}
}
return node;
}
//测试list转树形结构
public static void main(String[] args) {
Node node0=new Node(0,"中国",-1);
Node node1=new Node(1,"湖北省",0);
Node node2=new Node(2,"武汉市",1);
Node node3=new Node(3,"洪山区",2);
Node node4=new Node(4,"宜昌市",1);
Node node5=new Node(5,"上海市",0);
Node node6=new Node(6,"静安区",5);
List<Node> list=new ArrayList<>();
list.add(node3);
list.add(node4);
list.add(node1);
list.add(node2);
list.add(node5);
list.add(node6);
list.add(node0);
List<Node> nodes = buildTree(list,-1);
System.out.println(JSON.toJSONString(nodes));
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


