【java8 stream 集合转为树结构】

集合转为树结构

单表,数据有层级,通过parentId关联

先需要获取层级树类型的数据,但不想多次查询,需要减少查询sql次数

1.单表查询所有有效数据

2.逻辑层处理成树结构

java 复制代码
    public List<CheckVo> fun(){
        List<CheckVo> result = new ArrayList<>();
        // 查询 所有有效的数据
        List<CheckPo> checkPoList = super.getBaseMapper().selectList(Wrappers.<CheckPo>lambdaQuery()
                .eq(CheckPo::getStatus, StatusEnum.VALID.getValue()));
        List<CheckVo> checkVoList = CheckBeanConvertUtil.INSTANCE.getCheckVo(checkPoList);
        if(CollUtil.isNotEmpty(checkVoList)){
            result = checkVoList.stream().filter(item->item.getParentId()==null)
                   .map(item->{
                       item.setChildren(getChildren(item,checkVoList));
                       return item;
                   }).collect(Collectors.toList());
        }
		return result;
	}
   // 递归方法
    private List<CheckVo> getChildren(CheckVo vo,List<CheckVo> checkVoList){
        return checkVoList.stream()
                .filter(item->item.getParentId()!=null && item.getParentId().equals(vo.getId()))
                .map(item->{
                    item.setChildren(getChildren(item,checkVoList));
                    return item;
                }).collect(Collectors.toList());
    }
相关推荐
黄焖鸡能干四碗3 分钟前
智慧教育,智慧校园,智慧安防学校建设解决方案(PPT+WORD)
java·大数据·开发语言·数据库·人工智能
lssjzmn11 分钟前
Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
java·前端·后端·springboot·异步·接口优化
new_daimond25 分钟前
二级缓存在实际项目中的应用
java
一只乔哇噻32 分钟前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法
User_芊芊君子1 小时前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
2301_803554521 小时前
正向代理,反向代理,负载均衡还有nginx
java·nginx·负载均衡
要开心吖ZSH1 小时前
软件设计师备考-(十六)数据结构及算法应用(重要)
java·数据结构·算法·软考·软件设计师
向上的车轮1 小时前
基于Java Spring Boot的云原生TodoList Demo 项目,验证云原生核心特性
java·spring boot·云原生
程序员清风1 小时前
快手一面:为什么要求用Static来修饰ThreadLocal变量?
java·后端·面试
逍遥德1 小时前
Java8 Comparator接口 和 List Steam 排序使用案例
java·spring boot·list·排序算法