java后端实现树形结构
- 现实功能需求中许多都要使用后端来实现树形结构的实体类,如果放在前端进行实现,会非常影响效率,浏览器加载的资源过多,会导致页面非常的卡顿,这种卡顿的压力就给后端来实现了,如果给后端来实现的话,对服务器的压力也是相当的大(数据量大的情况),如果是数据量不大的情况下,放在前端实现和放在后端实现其实都是一样的
- 这里我先讲解一下使用后端来实现树形结构,下一篇文章讲解使用layui(javascript)来展示树形结构,或者使用ant-design-vue(vue)来讲解,看心情吧(其实也是做个笔记,方便下次直接ctrl+c,ctrl+v,不用自己在写一遍了)
- 各位码农能看到这篇文章的基本上也是知道自己要实现什么功能,这里我就不说树形结构是啥了,不然也看不到我这篇文章
- 在java中,万事皆是对象,所以首先我们要先创建返回的对象
package com.liu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode {
private String code;
private String parsentId;
private String name;
private List<TreeNode> children;
}
- 创建形成树形结构的工具类—注释都在代码里面
这里只是一个工具类,是抽离出来放在uitls类中的,也是设置了static的修饰符,可以直接使用类名进行调用,如果不加static修饰符,那就要使用对象来进行调用,加入static方便调用,直接传入对象集合进来就行
public static List<TreeNode> buildTree(List<TreeNode> treeNodeList) {
List<TreeNode> list = new ArrayList<>();
for (TreeNode item : treeNodeList) {
if ("".equals(item.getParsentId())) {
TreeNode children = findChildren(item, treeNodeList);
list.add(children);
}
}
return list;
}
public static TreeNode findChildren(TreeNode treeNode, List<TreeNode> treeNodeList) {
treeNode.setChildren(new ArrayList<>());
for (TreeNode item : treeNodeList) {
if (treeNode.getCode().equals(item.getParsentId())) {
treeNode.getChildren().add(findChildren(item,treeNodeList));
}
}
return treeNode;
}
- 后面至于怎么调用,都接触到这里了,应该不用我解释了,返回的数据就是树形结构的数据,前端拿到数据展示就行,可以使用layui框架来实现,牛逼的话就直接使用前端三剑客来实现吧
- 这里有说一点,这个是可以优化的代码,这里我是将全部的数据拿出来,整理成一个树形结构,如果是数据量很大的情况下,服务器压力会很大,前端的压力也是非常巨大的,因为前端需要渲染。所以这里你们可以优化,可以使用懒加载来实现这种树形结构,先查出一级的数据,然后根据一级的code代码,找出他子类的数据,这样优化的性能远远超出我这个代码的性能,当然你们也可以放在缓存中。看你们自己的需求,我这里数据量也就一万多条,还能扛得住