后端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;@Overridepublic List<AlgorithmInfoDTO> selectAllAlgorithmInfo() {//  最终数据List<AlgorithmInfoDTO> result = new ArrayList<>();//  查询algorithm表数据List<Algorithm> algorithmList = algorithmMapper.selectList(null);// 查询category表数据 存于Mapfor(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=>每次遍历这个MapLambdaQueryWrapper<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;@Overridepublic 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.rhkb.cn/news/22103.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE 播放视频

一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…

【Python项目】基于知识图谱的百科问答系统

【Python项目】基于知识图谱的百科问答系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架、Scrapy爬虫等技术实现。 系统简介&#xff1a; 百科问答系统是一个基于知识图谱的问答平台&#xff0c;旨在为用户提供快速、准确的百科知识查询服务。系统通过爬…

stm32rtc实时时钟详解文章

目录 stm32 后备区域基础知识详解 stm32 bkp基础知识详解 Unix时间戳基础知识详解 stm32 rtc实时时钟基础知识详解 相关代码初始化配置 欢迎指正&#xff0c;希望对你&#xff0c;有所帮助&#xff01;&#xff01;&#xff01; stm32 后备区域基础知识详解 stm32芯片的 …

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…

SpringMVC详解

文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…

【用deepseek和chatgpt做算法竞赛】——还得DeepSeek来 -Minimum Cost Trees_5

往期 【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_0&#xff1a;介绍了题目和背景【用deepseek和chatgpt做算法竞赛】——华为算法精英实战营第十九期-Minimum Cost Trees_1&#xff1a;题目输入的格式说明&#xff0c;选择了邻接表…

面试题汇总

1. 判断大小端问题 大端&#xff1a;低字节存放在高地址&#xff1b; 小端&#xff1a;低字节存放在低地址 如 : 0x12345678 bool is_little_endian() {unsigned int x 1;return ((char*)&x)[0]; }bool is_big_endian() {unsigned int x 1;return !((char*)&x)[0];…

jsherp importItemExcel接口存在SQL注入

一、漏洞简介 很多人说管伊佳ERP&#xff08;原名&#xff1a;华夏ERP&#xff0c;英文名&#xff1a;jshERP&#xff09;是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能&#xff0c;但后面将会推出ERP的全部功能&#xff0c;有兴趣请帮点一下 二、漏洞影响 …

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…

动态存储斐波那契数列(递归优化)

递归 递归是c当中一种自身调用自身的算法。 普通递归解决斐波那契数列问题 #include<iostream> using namespace std; int f(int n){int sum;if(n<2){sum1;}else{sumf(n-1)f(n-2);}return sum; } int main() {int n;cin>>n;cout<<f(n);return 0;}当数据…

php文件上传

文章目录 文件上传机制文件上传脚本文件上传绕过php后缀替换为空web服务器的解析漏洞绕过nginxiisapache 高级文件上传nginx自定义配置文件&#xff08;默认三分钟刷新一次&#xff09;服务端内容检测结合伪协议使用配合日志包含只允许图片上传 上传实战训练 文件上传机制 文件…

播放器系列1——总概述

播放器核心架构 模块解释 文件读取 读取视频文件、读取网络文件、读取音频文件&#xff0c;大概分为这三种&#xff0c;目前代码中仅实现了读取视频文件播放&#xff0c;也就是当没有video数据的时候播放器不可使用。 解复用 容器指的是多媒体文件中的封装格式&#xff0c;…

【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较

常见中间件api操作及性能比较 ☝️ MySQL crud操作✌️ maven依赖✌️ 配置✌️ 定义实体类✌️ 常用api ☝️ Redis crud操作✌️ maven依赖✌️ 配置✌️ 常用api ☝️ MongoDB crud操作✌️ maven依赖✌️ 配置文件✌️ 定义实体类✌️ MongoDB常用api ☝️ ES crud操作 ⭐️…

【进程与线程】Linux 线程、同步以及互斥

每个用户进程有自己的地址空间。 线程是操作系统与多线程编程的基础知识。 系统为每个用户进程创建一个 task_struct 来描述该进程&#xff1a;该结构体中包含了一个指针指向该进程的虚拟地址空间映射表&#xff1a; 实际上 task_struct 和地址空间映射表一起用来表示一个进程…

实现动态翻转时钟效果的 HTML、CSS 和 JavaScript,附源码

实现动态翻转时钟效果的 HTML、CSS 和 JavaScript 在现代网页设计中&#xff0c;动画效果可以极大地增强用户体验。本文将介绍如何利用 HTML、CSS 和 JavaScript 创建一个动态翻转时钟的效果&#xff0c;模拟经典机械翻页时钟的视觉效果。我们将通过详细的步骤讲解如何实现时钟…

Spring Boot与MyBatis

Spring Boot与MyBatis的配置 一、简介 Spring Boot是一个用于创建独立的、基于Spring的生产级应用程序的框架&#xff0c;它简化了Spring应用的初始搭建以及开发过程。MyBatis是一款优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。将Spring Boot和MyBa…

1.16作业

1 进注册界面&#xff0c;第一次以为抓包选把isadmin ture了就好 第二次尝试&#xff0c;勾选is admin&#xff0c;有需要invitecode&#xff08;经典&#xff09; 2 p r**5 r**4 - r**3 r**2 - r 2023 q r**5 - r**4 r**3 - r**2 r 2023 n 25066797992811602609904…

LeetCode 2209.用地毯覆盖后的最少白色砖块:记忆化搜索之——深度优先搜索(DFS)

【LetMeFly】2209.用地毯覆盖后的最少白色砖块&#xff1a;记忆化搜索之——深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-white-tiles-after-covering-with-carpets/ 给你一个下标从 0 开始的 二进制 字符串 floor &#xff0c;它表示地…