创建节点类

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author cnxjk
 * @create TreeNode date  2021/11/14 9:17 上午
 **/
@Data
public class TreeNode {
	protected int id;
	protected int parentId;
	protected String name;
	protected List<TreeNode> children = new ArrayList<TreeNode>();

	public void add(TreeNode node) {
		children.add(node);



	}
}

Tree算法工具类

import lombok.experimental.UtilityClass;

import java.util.ArrayList;
import java.util.List;

/**
 * @author cnxjk
 * @create TreeUtil date 2021/11/14 9:09 上午
 **/
@UtilityClass
public class TreeUtil {
	/**
	 * 两层循环实现建树
	 *
	 * @param treeNodes 传入的树节点列表
	 * @return
	 */
	public <T extends TreeNode> List<T> bulid(List<T> treeNodes, Object root) {

		List<T> trees = new ArrayList<>();

		for (T treeNode : treeNodes) {

			if (root.equals(treeNode.getParentId())) {
				trees.add(treeNode);
			}

			for (T it : treeNodes) {
				if (it.getParentId() == treeNode.getId()) {
					if (treeNode.getChildren() == null) {
						treeNode.setChildren(new ArrayList<>());
					}
					treeNode.add(it);
				}
			}
		}
		return trees;
	}

	/**
	 * 使用递归方法建树
	 *
	 * @param treeNodes
	 * @return
	 */
	public <T extends TreeNode> List<T> buildByRecursive(List<T> treeNodes, Object root) {
		List<T> trees = new ArrayList<T>();
		for (T treeNode : treeNodes) {
			if (root.equals(treeNode.getParentId())) {
				trees.add(findChildren(treeNode, treeNodes));
			}
		}
		return trees;
	}

	/**
	 * 递归查找子节点
	 *
	 * @param treeNodes
	 * @return
	 */
	public <T extends TreeNode> T findChildren(T treeNode, List<T> treeNodes) {
		for (T it : treeNodes) {
			if (treeNode.getId() == it.getParentId()) {
				if (treeNode.getChildren() == null) {
					treeNode.setChildren(new ArrayList<>());
				}
				treeNode.add(findChildren(it, treeNodes));
			}
		}
		return treeNode;
	}
}

tree业务Bean

/**
 * @author cnxjk
 * @create BusDeptTree date 2021/11/14 9:21 上午
 **/
@Data
@EqualsAndHashCode(callSuper = true)
public class BusDeptTree extends TreeNode {
	private String name;
}

业务实现类

@Override
	public List<BusDeptTree> treeNode() {
		QueryWrapper<BusDept> wrapper = new QueryWrapper<>();
		wrapper.eq("del_flag", 0);
		List<BusDept> depts = super.list(wrapper);
		List<BusDeptTree> treeList = depts.stream()
				.filter(dept -> !dept.getDeptId().equals(dept.getParentId()))
				.map(dept -> {
					BusDeptTree node = new BusDeptTree();
					node.setId(dept.getDeptId());
					node.setParentId(dept.getParentId());
					node.setName(dept.getName());
					return node;
				}).collect(Collectors.toList());
		return TreeUtil.bulid(treeList, -1);
	}

参考博客:悠悠一小生