【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());
    }
相关推荐
Haooog11 分钟前
Agent 开发中的 Memory:State、短期记忆、长期记忆与 Memory Retrieval
java·agent·memory
砚底藏山河18 分钟前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
抠脚小弟33 分钟前
Spring Cache 使用详解:从入门到实战
java·spring
ZGG00343 分钟前
MySQL 索引详解:B+ 树、聚簇索引与最左前缀
java·数据库·mysql
萧瑟余晖1 小时前
Java深入解析篇五十四之对象模型详解
java·开发语言
张文是假的啊1 小时前
Java | record | Controller逻辑
java·开发语言
勿忘,瞬间1 小时前
Mybatis高阶
java·数据库·mybatis
嘻哈baby3 小时前
Go 函数中的参数为什么不支持默认值?
java·开发语言·jvm
慧都小项3 小时前
MyEclipse 2026:当 Agent、MCP 与 Java 26 进入 Eclipse 工作流
java·eclipse·springboot·copilot·myeclipse
CoderYanger3 小时前
前端基础——JavaScript(基础语法)(下篇)
java·开发语言·前端·javascript·程序人生·面试·职场和发展