Java json转树

1.工具类

package com.xiaolc.util;

import com.xiaolc.model.Menu;

import java.util.*;

/**
 * @author lc
 * @Date: 2019/1/3 13:44
 * json树工具类
 */
public class JsonTree {
                                        //需要替换
    public List<Menu> findTree(List<Menu> allMenu) {
        Map<String, Object> data = new HashMap<String, Object>();
        try {//查询所有菜单
            //List<Menu> allMenu = service.findAll();
            //根节点
            List<Menu> rootMenu = new ArrayList<Menu>();
            for (Menu nav : allMenu) {
                if (nav.getParentId().equals("0")) {//父节点是0的,为根节点。
                    rootMenu.add(nav);
                }
            }
            /* 根据Menu类的order排序 */
            //Collections.sort(rootMenu, order());
            //为根菜单设置子菜单,getClild是递归调用的
            for (Menu nav : rootMenu) {
                /* 获取根节点下的所有子节点 使用getChild方法*/
                List<Menu> childList = getChild(nav.getClassId(), allMenu);
                nav.setChildren(childList);//给根节点设置子节点
            }
            /**
             * 输出构建好的菜单数据。
             *
             */
            //data.put("success", "true");
            //data.put("data", rootMenu);
            return rootMenu;
        } catch (Exception e) {
            //data.put("success", "false");
            //data.put("data", new ArrayList());
            return null;
        }
    }

    /*
     * 排序,根据order排序
     */
   /* public Comparator<Menu> order() {
        Comparator<Menu> comparator = new Comparator<Menu>() {
            @Override
            public int compare(Menu o1, Menu o2) {
                if (o1.getOrder() != o2.getOrder()) {
                    return o1.getOrder() - o2.getOrder();
                }
                return 0;
            }
        };
        return comparator;
    }
*/
    /**
     * 获取子节点
     *
     * @param id      父节点id
     * @param allMenu 所有菜单列表
     * @return 每个根节点下,所有子菜单列表
     */
    public List<Menu> getChild(String id, List<Menu> allMenu) {
        //子菜单
        List<Menu> childList = new ArrayList<Menu>();
        for (Menu nav : allMenu) {
            // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
            //相等说明:为该根节点的子节点。
            if (nav.getParentId().equals(id)) {
                childList.add(nav);
            }
        }
        //递归
        for (Menu nav : childList) {
            nav.setChildren(getChild(nav.getClassId(), allMenu));
        }
        //Collections.sort(childList, order());//排序
        //如果节点下没有子节点,返回一个空List(递归退出)
        if (childList.size() == 0) {
            return new ArrayList<Menu>();
        }
        return childList;
    }
}

2.controller

 @GetMapping("abc")
    public JSONResponse abc() {
        List<Menu> all = service.findAll();
        JsonTree jsonTree = new JsonTree();
        List<Menu> tree = jsonTree.findTree(all);
        return ResultUtil.success("", tree);
    }

猜你喜欢

转载自blog.csdn.net/qq_41988504/article/details/86062191
今日推荐