美团笔试题时长60分钟(一)

 目标是根据数据库的菜单实现无限级别的菜单问题

/**
 * 数据库基础菜单
 */
public class Menu {
    private long id;
    private long parentId;
    private String name;

    public Menu(long id, long parentId, String name) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public long getParentId() {
        return parentId;
    }

    public void setParentId(long parentId) {
        this.parentId = parentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
/**
 * 展示观看页面的菜单
 */
public class MenuBo {
    private long id;
    private String name;
    private List<MenuBo> menuBoList;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<MenuBo> getMenuBoList() {
        return menuBoList;
    }

    public void setMenuBoList(List<MenuBo> menuBoList) {
        this.menuBoList = menuBoList;
    }
}
import com.alibaba.fastjson.JSONObject;

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

public class Main {


    public static void main(String[] args) {
        List<Menu> list = new ArrayList<>();
        Menu b = new Menu(1, 0, "主页");
        Menu c = new Menu(2, 1, "分类1");
        Menu d = new Menu(3, 1, "分类2");
        Menu e = new Menu(4, 2, "分类1--子1");
        Menu f = new Menu(5, 2, "分类1--子2");
        Menu g = new Menu(6, 3, "分类2--子1");
        Menu q = new Menu(7, 3, "分类2--子2");
        Menu ff = new Menu(8, 7, "分类2--子2--1");
        Menu ff1 = new Menu(9, 8, "分类2--子2--1--1");
        list.add(b);
        list.add(c);
        list.add(d);
        list.add(e);
        list.add(f);
        list.add(g);
        list.add(q);
        list.add(ff);
        list.add(ff1);
        List<MenuBo> menuBoList = toMenu(list);
        Object menu = JSONObject.toJSON(menuBoList);
        System.out.println(menu);

    }

    private static List<MenuBo> toMenu(List<Menu> list) {
        List<MenuBo> newMenuList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getParentId() == 0) {
                MenuBo menuBo = new MenuBo();
                menuBo.setId(list.get(i).getId());
                menuBo.setName(list.get(i).getName());
                newMenuList.add(menuBo);
            }
        }
        for (MenuBo node : newMenuList) {
            List<MenuBo> child = getChild(node.getId(), list);
            node.setMenuBoList(child);
        }
        return newMenuList;
    }

    /**
     * @return
     * @Author
     * @Description //TODO 获取根节点的子节点
     * @Param
     */
    public static List<MenuBo> getChild(long id, List<Menu> allNode) {
        //存放子菜单的集合
        List<MenuBo> listChild = new ArrayList<>();
        for (Menu node : allNode) {
            if (node.getParentId() == id) {
                MenuBo menuBo = new MenuBo();
                menuBo.setId(node.getId());
                menuBo.setName(node.getName());
                listChild.add(menuBo);
            }
        }
        //递归:
        for (MenuBo node : listChild) {
            node.setMenuBoList(getChild(node.getId(), allNode));
        }
        if (listChild.size() == 0) {
            return null;
        }
        return listChild;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我来秋风扫落叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值