Java教程:如何使用递归生成父子级树形结构数据供前端使用

–在Vue中Treeselect下拉插件或表单展示通常需要组装好的树形结构数据,大多数朋友都喜欢在前端组装,可以实现,但这种方式主要消耗的是浏览器或客户主机的性能,不同机器还可会出现卡顿现象,体验较差,本地为大家提供Java的实现方法,运行速度快,前端无需再编写额外代码,供大家摘抄!

源码:

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

/**
 *  树形工具类
 * @author [email protected]
 */
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方式进行存储

本次教程到这里就结束了,希望大家多多关注支持(首席摸鱼师 微信同号),持续跟踪最新文章吧~

你可能感兴趣的:(java,前端,开发语言)