–在Vue中Treeselect下拉插件或表单展示通常需要组装好的树形结构数据,大多数朋友都喜欢在前端组装,可以实现,但这种方式主要消耗的是浏览器或客户主机的性能,不同机器还可会出现卡顿现象,体验较差,本地为大家提供Java的实现方法,运行速度快,前端无需再编写额外代码,供大家摘抄!
源码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 树形工具类
* @author wfeil211@foxmail.com
*/
public class TableTreeUtil {
/**
* 构建前端所需要树结构
*
* @param menus 菜单列表
* @return 树结构列表
*/
public static List<MenuVO> buildMenuTree(List<MenuVO> menus) {
List<MenuVO> returnList = new ArrayList<>();
List<Long> tempList = new ArrayList<>();
for (MenuVO menu : menus) {
tempList.add(menu.getMenuId());
}
for (Iterator<MenuVO> iterator = menus.iterator(); iterator.hasNext(); ) {
MenuVO menu = iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId())) {
recursionFn(menus, menu);
returnList.add(menu);
}
}
if (returnList.isEmpty()) {
returnList = menus;
}
return returnList;
}
/**
* 递归列表
*
* @param list
* @param t
*/
private static void recursionFn(List<MenuVO> list, MenuVO t) {
// 得到子节点列表
List<MenuVO> childList = getChildList(list, t);
t.setChildren(childList);
for (MenuVO tChild : childList) {
if (hasChild(list, tChild)) {
recursionFn(list, tChild);
}
}
}
/**
* 得到子节点列表
*/
private static List<MenuVO> getChildList(List<MenuVO> list, MenuVO t) {
List<MenuVO> tlist = new ArrayList<>();
Iterator<MenuVO> it = list.iterator();
while (it.hasNext()) {
MenuVO n = it.next();
if ((n.getParentId()) .equals(t.getMenuId())) {
tlist.add(n);
}
}
return tlist;
}
/**
* 判断是否有子节点
*/
private static boolean hasChild(List<MenuVO> list, MenuVO t) {
return getChildList(list, t).size() > 0 ? true : false;
}
}
其中通过menuId,与parentId进行连接,并将子类以Children方式进行存储
本次教程到这里就结束了,希望大家多多关注支持(首席摸鱼师 微信同号),持续跟踪最新文章吧~