用java新特性的stream流的方法来做菜单

本文介绍了一种使用Java实现的菜单数据处理方法,通过递归查询子节点来构建树形菜单结构。该方法首先从数据库中获取所有菜单项,然后筛选出顶级菜单,并递归地为其添加子菜单。
package oauth.pay.biz;

import app.response.MenuResponse;
import lombok.Data;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Component
public class MenuBiz {
    /**
     * 获取菜单的信息
     * @return
     */
    public List<MenuResponse> getMenu() {
        //模拟从数据库查出来的数据
        List<MenuResponse> menuResponseList= Arrays.asList(
                new MenuResponse(1L,"根节点",0L),
                new MenuResponse(2L,"节点1",1L),
                new MenuResponse(3L,"节点2",2L),
                new MenuResponse(4L,"节点3",3L),
                new MenuResponse(5L,"节点4",4L),
                new MenuResponse(6L,"节点5",5L),
                new MenuResponse(7L,"节点6",6L),
                new MenuResponse(8L,"节点7",7L),
                new MenuResponse(9L,"节点8",8L),
                new MenuResponse(10L,"节点9",9L),
                new MenuResponse(11L,"节点10",10L),
                new MenuResponse(12L,"节点11",11L),
                new MenuResponse(13L,"节点12",12L),
                new MenuResponse(14L,"节点13",13L),
                new MenuResponse(15L,"节点14",14L),
                new MenuResponse(16L,"节点15",15L),
                new MenuResponse(17L,"节点16",16L),
                new MenuResponse(18L,"节点17",17L)

        );
        //获取父节点
        List<MenuResponse> collect=menuResponseList.stream().filter(menuResponse -> menuResponse.getParentId()==0).map((m) ->{
            m.setChildList(getChildrens(m,menuResponseList));
            return m;
        }).collect(Collectors.toList());

       return collect;
    }

    /***
     * 递归查询子节点
     * @param root 根节点
     * @param all 所有节点
     * @return
     */
    public List<MenuResponse> getChildrens(MenuResponse root,List<MenuResponse> all){
        List<MenuResponse> children=all.stream().filter(m->{
            return Objects.equals(m.getParentId(),root.getId());
        }).map((m) ->{
            m.setChildList(getChildrens(m,all));
            return m;
        }).collect(Collectors.toList());
        return  children;

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值