最近要开发一个需求,将数据库里面的列表组成一棵树形传给前端。首先我想到的是逐个递归放进去,但是尝试了半天,结果都不对,最终研究出来并不需要递归,一个for循环就搞定了(惭愧,弄了好长时间才弄出来,脑子可能是出去玩儿了)。
实体类:
package com.example.demo;
import lombok.Data;
import java.util.List;
/**
* @Author: zxy
* @Description:
* @Date: 2020/9/29 16:56
*/
@Data
public class User {
private int id;
private int parentId;
private String name;
private List<User> children;
}
初始化及转化为树形:
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User();
user.setId(0);
user.setName("zs");
users.add(user);
User user1 = new User();
user1.setId(1);
user1.setName("zs1");
user1.setParentId(0);
users.add(user1);
User user2 = new User();
user2.setId(2);
user2.setName("zs2");
user2.setParentId(1);
users.add(user2);
User user3 = new User();
user3.setId(3);
user3.setName("zs2");
user3.setParentId(1);
users.add(user3);
User user4 = new User();
user4.setId(4);
user4.setName("zs3");
user4.setParentId(2);
users.add(user4);
User user5 = new User();
user5.setId(5);
user5.setName("zs3");
user5.setParentId(2);
users.add(user5);
digui2(users);
System.out.println("users=====>" + JSON.toJSONString(users));
}
private void digui2(List<User> users) {
for (User user : users) {
List<User> childrenUser = new ArrayList<>();
for (User user1 : users) {
if (Objects.equals(user.getId(), user1.getParentId())) {
childrenUser.add(user1);
}
}
user.setChildren(childrenUser);
}
}
说明:
初始化时,list的结构如下:
ID | parentId | name | children |
---|---|---|---|
0 | - | zs | - |
1 | 0 | zs1 | - |
2 | 1 | zs2 | - |
3 | 1 | zs3 | - |
4 | 2 | zs4 | - |
5 | 2 | zs5 | - |
最终组合成的树形结构应该如此(画图软件用的不太熟练,直接上手画了,=_=):
打印结果:
[{"children":[{"$ref":".."},{"children":[{"children":[{"children":[],"id":4,"name":"zs3","parentId":2},{"children":[],"id":5,"name":"zs3","parentId":2}],"id":2,"name":"zs2","parentId":1},{"children":[],"id":3,"name":"zs2","parentId":1}],"id":1,"name":"zs1","parentId":0}],"id":0,"name":"zs","parentId":0},{"$ref":"$[0].children[1]"},{"$ref":"$[0].children[1].children[0]"},{"$ref":"$[0].children[1].children[1]"},{"$ref":"$[0].children[1].children[0].children[0]"},{"$ref":"$[0].children[1].children[0].children[1]"}]