需求:构建树形结构
工作中很多情况下需要构建树形结构,自己写实在太麻烦了,直接上hutool工具
广东省
|-广州市
|-南沙区
|-万顷沙镇
|-黄阁镇
湖南省
|-长沙市
|-芙蓉区
1、pom依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
2、entity对象
@Data
@Accessors(chain = true)
public class City {
private String name;
private Integer id;
private Integer pid;
private String desc;
private List<City> children;
public City(Integer id, String name, Integer pid, String desc) {
this.name = name;
this.id = id;
this.pid = pid;
this.desc = desc;
}
}
3、hutool工具包封装TreeUtil工具类使用
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import com.alibaba.fastjson.JSON;
import com.example.basePractice.entity.City;
import java.util.ArrayList;
import java.util.List;
/**
* @author: ysm
* @date: 2022/11/30 9:33
*/
public class TreeUtils {
public static void main(String[] args) {
List<City> list = new ArrayList<>();
list.add(new City(1, "广东省", 0, "封控区"));
list.add(new City(2, "广州市", 1, "封控区"));
list.add(new City(3, "南沙区", 2, "封控区"));
list.add(new City(4, "万顷沙镇", 3, "封控区"));
list.add(new City(5, "黄阁镇", 3, "封控区"));
list.add(new City(6, "湖南省", 0, "封控区"));
list.add(new City(7, "长沙市", 6, "封控区"));
list.add(new City(8, "芙蓉区", 7, "封控区"));
System.out.println(list);
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
treeNodeConfig.setIdKey("id");
treeNodeConfig.setParentIdKey("pid");
treeNodeConfig.setNameKey("name");
treeNodeConfig.setChildrenKey("children");//默认为children可以不用设置
// treeNodeConfig.setDeep(2); //最大递归深度
// 第二个参数是根节点id
List<Tree<String>> treeList = TreeUtil.build(list, "0", treeNodeConfig, (city, tree) -> {
tree.setId(city.getId().toString());
tree.setName(city.getName());
tree.setParentId(city.getPid().toString());
tree.putExtra("desc", city.getDesc());
});
System.out.println(JSON.toJSONString(treeList));
}
}
最后附上hutool官方文档:Hutool Wiki_V4.1.0 (mydoc.io)