当前位置: 首页 > article >正文

后端Java Stream数据流的使用=>代替for循环

API讲解 

  

对比 

示例代码对比

for循环遍历 

package cn.ryanfan.platformback.service.impl;

import cn.ryanfan.platformback.entity.Algorithm;
import cn.ryanfan.platformback.entity.AlgorithmCategory;
import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO;
import cn.ryanfan.platformback.mapper.AlgorithmCategoryMapper;
import cn.ryanfan.platformback.mapper.AlgorithmMapper;
import cn.ryanfan.platformback.service.IAlgorithmService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

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

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 刘一帆
 * @since 2025-02-20
 */
@Service
@RequiredArgsConstructor
public class AlgorithmServiceImpl extends ServiceImpl<AlgorithmMapper, Algorithm> implements IAlgorithmService {

    private final AlgorithmMapper algorithmMapper;
    private final AlgorithmCategoryMapper algorithmCategoryMapper;

    @Override
    public List<AlgorithmInfoDTO> selectAllAlgorithmInfo() {
        //  最终数据
        List<AlgorithmInfoDTO> result = new ArrayList<>();
        //  查询algorithm表数据
        List<Algorithm> algorithmList = algorithmMapper.selectList(null);
        // 查询category表数据 存于Map
        for(Algorithm algorithm : algorithmList){
            AlgorithmInfoDTO algorithmInfoDTO = new AlgorithmInfoDTO();
            algorithmInfoDTO.setId(algorithm.getId());
            algorithmInfoDTO.setName(algorithm.getName());
            algorithmInfoDTO.setStatus(algorithm.getStatus());
            //设置DTO的category_Name 旧方法:在for循环中进行查询(每一次for都在查询) 新方法:将category表新查出=>存于Map=>每次遍历这个Map
            LambdaQueryWrapper<AlgorithmCategory> lambdaQueryWrapper = new LambdaQueryWrapper<>();
            lambdaQueryWrapper.eq(AlgorithmCategory::getId,algorithm.getCategoryId());
            algorithmInfoDTO.setCategoryName(algorithmCategoryMapper.selectOne(lambdaQueryWrapper).getName());
            result.add(algorithmInfoDTO);
        }
        return result;
    }
}

stream流式处理

package cn.ryanfan.platformback.service.impl;

import cn.ryanfan.platformback.entity.Algorithm;
import cn.ryanfan.platformback.entity.AlgorithmCategory;
import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO;
import cn.ryanfan.platformback.mapper.AlgorithmCategoryMapper;
import cn.ryanfan.platformback.mapper.AlgorithmMapper;
import cn.ryanfan.platformback.service.IAlgorithmService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 刘一帆
 * @since 2025-02-20
 */
@Service
@RequiredArgsConstructor
public class AlgorithmServiceImpl extends ServiceImpl<AlgorithmMapper, Algorithm> implements IAlgorithmService {

    private final AlgorithmMapper algorithmMapper;
    private final AlgorithmCategoryMapper algorithmCategoryMapper;

    @Override
    public List<AlgorithmInfoDTO> selectAllAlgorithmInfo() {
        //  查询algorithm表数据
        List<Algorithm> algorithmList = algorithmMapper.selectList(null);
        // 查询category表数据 存于Map 查询所有的分类数据,避免逐个查询
        List<AlgorithmCategory> categoryList = algorithmCategoryMapper.selectList(null);
        Map<Integer,String> categoryMap = categoryList.stream().collect(Collectors.toMap(AlgorithmCategory::getId,AlgorithmCategory::getName));
        //  最终数据
        List<AlgorithmInfoDTO> result  = algorithmList.stream()
                .map(algorithm -> {
                    AlgorithmInfoDTO algorithmInfoDTO = new AlgorithmInfoDTO();
                    algorithmInfoDTO.setId(algorithm.getId());
                    algorithmInfoDTO.setName(algorithm.getName());
                    algorithmInfoDTO.setStatus(algorithm.getStatus());

                    // 通过分类 id 获取分类名称
                    String categoryName = categoryMap.get(algorithm.getCategoryId());
                    algorithmInfoDTO.setCategoryName(categoryName != null ? categoryName : "未知分类");

                    return algorithmInfoDTO;
                })
                .collect(Collectors.toList());
        return result;
    }
}


http://www.kler.cn/a/554669.html

相关文章:

  • Compose 组件渲染流程
  • 如何在Ubuntu 22.04上安装NVIDIA驱动:自动安装与手动安装的全面指南
  • 非常简洁的一个 Excel 导出封装,生成多个 Excel 文件并打包成 zip 通过浏览器下载
  • 责任链模式原理详解和源码实例以及Spring AOP拦截器链的执行源码如何使用责任链模式?
  • UEFI Spec 学习笔记---6 - Block Translation Table (BTT) Layout
  • 算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
  • AI 是如何赋能企业,推动新的“商业革命”的?
  • 国产编辑器EverEdit -告别东找西找!一键打开当前文件所在目录!
  • RocketMQ保证消息有序性
  • linux5-多任务--进程fork()
  • 力扣hot100 ——和为k的子数组 前后缀和(积)各种情况总结
  • 大模型高效注意力机制全解析:FlashAttention 与稀疏注意力实战
  • 【自动化脚本工具】Hammerspoon (Mac)
  • 基于STM32与IFX007T的电机驱动全解析(无人机/机器人实战)
  • 【队列】循环队列(Circular Queue)详解
  • 美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
  • Junit——白盒测试
  • 前端js题目大全
  • 区块链技术:构建区块链生态的核心要素
  • uniapp录制语音