许多项目中常用的树结构,比如公司和部门、父部门和子部门、标题和详情等等,子部门和父部门存储在同一张表中,二两者的关联关系是通过子部门的父级id指向父部门,这样实现的。所以在查询时需要构建树结构。
下面是我给大家做的测试示范,懒得用数据库了,直接new对象
引入依赖
<!-- web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- fastJSON工具依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<!-- 参数和get/set方法生成-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
实体类
package com.ckw.demo.getTree;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
/** id */
private int id;
/** 父级id */
private int parentId;
/** 姓名 */
private String name;
/** 年龄 */
private int age;
/** 性别 */
private String sex;
/** 子集 */
private ArrayList<User> childUser;
public User(int id, int parentId, String name, int age, String sex) {
this.id = id;
this.parentId = parentId;
this.name = name;
this.age = age;
this.sex = sex;
}
}
Controller接口
package com.ckw.demo.getTree;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@RestController
@RequestMapping("/user")
public class ListToTree {
@GetMapping("/tree")
public Object tree(){
//顶级节点
User user1 = new User(1, 0, "肥大", 24, "男");
User user2 = new User(2, 0, "滑口二", 20, "男");
//子节点
User user3 = new User(3, 1, "瘦三叔", 31, "男");
User user4 = new User(4, 1, "农吧四", 36, "男");
User user5 = new User(5, 2, "番薯五", 28, "男");
//把所有节点放入相同List
List<User> userList = Arrays.asList(user1, user2, user3, user4, user5);
List<User> userTree = buildTree(userList);
Object json = JSON.toJSON(userTree);
return json;
}
//构建二级树
private static List<User> buildTree(List<User> userList){
HashMap<Integer, User> map = new HashMap<>();
ArrayList<User> list = new ArrayList<>();
for (User user : userList) {
map.put(user.getId(),user);
}
for (User user : userList) {
if (user.getParentId() != 0){
User parentUser = map.get(user.getParentId());
if (parentUser.getChildUser()==null){
parentUser.setChildUser(new ArrayList<>());
}
parentUser.getChildUser().add(user);
}else {
list.add(user);
}
}
return list;
}
}
测试结果
[
{
"childUser": [
{
"childUser": null,
"sex": "男",
"name": "瘦三",
"id": 3,
"age": 31,
"parentId": 1
},
{
"childUser": null,
"sex": "男",
"name": "农吧四",
"id": 4,
"age": 36,
"parentId": 1
}
],
"sex": "男",
"name": "陈大",
"id": 1,
"age": 24,
"parentId": 0
},
{
"childUser": [
{
"childUser": null,
"sex": "男",
"name": "水木五",
"id": 5,
"age": 28,
"parentId": 2
}
],
"sex": "男",
"name": "劳二",
"id": 2,
"age": 20,
"parentId": 0
}
]
get到知识点麻烦点个赞,分享不易!