【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());
    }
相关推荐
gelald5 分钟前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川7 分钟前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月11 分钟前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66615 分钟前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
殷紫川20 分钟前
深入拆解 Java volatile:从内存屏障到无锁编程的实战指南
java
eddieHoo27 分钟前
查看 Tomcat 的堆内存参数
java·tomcat
那个失眠的夜28 分钟前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
Java成神之路-37 分钟前
SpringMVC 响应实战指南:页面、文本、JSON 返回全流程(Spring系列13)
java·spring·json
殷紫川39 分钟前
深入拆解 synchronized:从偏向锁到重量级锁的升级之旅与优化秘籍
java
Momentary_SixthSense40 分钟前
设计模式之工厂模式
java·开发语言·设计模式