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

后端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;}
}

相关文章:

后端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; im…...

遗传算法与深度学习实战系列,自动调优深度神经网络和机器学习的超参数

遗传算法与深度学习实战系列文章 目录 进化深度学习生命模拟及其应用生命模拟与进化论遗传算法中常用遗传算子遗传算法框架DEAPDEAP框架初体验使用遗传算法解决N皇后问题使用遗传算法解决旅行商问题使用遗传算法重建图像遗传编程详解与实现粒子群优化详解与实现协同进化详解与…...

体验用ai做了个python小游戏

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

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…...

阿里云ECS命名规则解析与规格选型实战指南

阿里云ECS实例的命名规则通常采用 “ecs.{实例族}.{规格大小}” 的结构,各部分含义如下: 命名字段说明ecs代表“弹性计算服务”(Elastic Compute Service)。{实例族}标识实例的用途和代次(如 g7、c7、r7),由字母+数字组成。{规格大小}表示实例的资源配置(如 large、2xl…...

Spring MVC 的核心以及执行流程

Spring MVC的核心 Spring MVC是Spring框架中的一个重要模块&#xff0c;它采用了经典的MVC&#xff08;Model-View-Controller&#xff09;设计模式。 MVC是一种软件架构的思想&#xff0c;它将软件按照模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;…...

ai json处理提示词

在解析JSON数据时&#xff0c;提示词的设计需要明确任务目标、输入格式以及期望的输出格式。以下是一些常用的提示词示例&#xff0c;适用于不同的JSON解析场景&#xff1a; 1. 提取特定字段 用于从JSON中提取特定字段的值。 示例&#xff1a; 从以下JSON数据中提…...

2025开源数据工程全景图

作者 | Alireza Sadeghi 译自Practical Data Engineering 2025年开源数据工程领域呈现蓬勃创新与生态重构的双重态势&#xff0c;九大技术赛道在实时化、轻量化与云原生架构驱动下加速演进。一份来自外网的2025年开源数据工程全景图全面地展示了这一领域的发展态势与走向&…...

438. 找到字符串中所有字母异位词(LeetCode 热题 100)

题目来源&#xff1a; 438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s &…...

c++标准io与线程,互斥锁

封装一个 File 类&#xff0c; 用有私有成员 File* fp 实现以下功能 File f "文件名" 要求打开该文件 f.write(string str) 要求将str数据写入文件中 string str f.read(int size) 从文件中读取最多size个字节&#xff0c; 并将读取到的数据返回 析构函数 #…...

java简单实现请求deepseek

1.deepseek的api创建 deepseek官网链接 点击右上API开放平台后找到API keys 创建APIkey&#xff1a; 注意&#xff1a;创建好的apikey只能在创建时可以复制&#xff0c;要保存好 2.java实现请求deepseek 使用springbootmaven 2.1 pom文件&#xff1a; <?xml version&…...

Ext系列文件系统 -- 磁盘结构,磁盘分区,inode,ext文件系统,软硬链接

目录 1.理解硬盘 1.1 磁盘、服务器、机柜、机房 1.2 磁盘物理结构 1.3 磁盘的存储结构 1.4 磁盘的逻辑结构 1.4.1 理解逻辑结构 1.4.2 真实过程 1.5 CHS地址和LBA地址的相互转换 2.引入文件系统 2.1 “块”概念 2.2 “分区”概念 2.3 “inode”概念 3.ext2文件系…...

PyTorch Tensor 形状变化操作详解

PyTorch Tensor 形状变化操作详解 在深度学习中&#xff0c;Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状&#xff0c;以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作&#xff0…...

文字识别软件cnocr学习笔记

• 安装 pip install cnocr • 基础的使用方法 首次运行会下载安装模型&#xff0c;如果没有梯子&#xff0c;会报错&#xff1a; 在网络上查找cnocr的模型资源&#xff0c;并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc%257B%2…...

本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】

本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1&#xff0c; 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…...

macOS部署DeepSeek-r1

好奇&#xff0c;跟着网友们的操作试了一下 网上方案很多&#xff0c;主要参考的是这篇 DeepSeek 接入 PyCharm&#xff0c;轻松助力编程_pycharm deepseek-CSDN博客 方案是&#xff1a;PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…...

基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、为什么选择这两个芯片&#xff1f;1.1 STM32微控制器1.2 ROHM BD623x电机驱动 二、核心控制原理详解2.1 H桥驱动奥…...

基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)

在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...

C++中const T为什么少见?它有什么用途?

在C中&#xff0c;右值引用&#xff08;T&&&#xff09;是移动语义和完美转发的核心特性之一&#xff0c;但你是否注意到&#xff0c;const T&&&#xff08;const右值引用&#xff09;却很少被使用&#xff1f;它到底有什么用途&#xff1f; 今天我们就来深入…...

Leetcode 位计算

3095. 或值至少 K 的最短子数组 I 3097. Shortest Subarray With OR at Least K II class Solution:def minimumSubarrayLength(self, nums: List[int], k: int) -> int:n len(nums)bits [0] * 30res infdef calc(bits):return sum(1 << i for i in range(30) if…...

FuckFuckadblock开发者指南:如何贡献和扩展过滤规则

FuckFuckadblock开发者指南&#xff1a;如何贡献和扩展过滤规则 【免费下载链接】fuckfuckadblock Filters for blocking mining, pop-ups and anti-adblock bypass. 项目地址: https://gitcode.com/gh_mirrors/fu/fuckfuckadblock FuckFuckadblock是一款强大的开源过滤…...

别再只盯着IoU了!目标检测中GIoU、DIoU、CIoU损失函数详解与PyTorch实现

目标检测进阶&#xff1a;从IoU到CIoU的损失函数演化与实战实现 当你在训练目标检测模型时&#xff0c;是否遇到过这样的困境&#xff1a;明明调整了学习率和数据增强策略&#xff0c;但边界框回归的精度始终卡在一个瓶颈&#xff1f;问题的根源可能就藏在那个看似简单的IoU&am…...

Cadence allegro 全家桶 以及相关文件说明

0. cadence allegro 系列文件说明 版图编辑器会自动为你输入的主文件名添加对应后缀,不同后缀代表不同文件类型,说明如下: 表格 后缀 文件类型说明 .art(默认) 光绘文件。可在「设置 – 用户偏好设置」(命令:enved)中配置环境变量 ext_artwork,自定义光绘文件默认后…...

Git克隆报错SSL routines:ssl3_get_record?别慌,这可能是你的代理在‘捣乱’

Git克隆报错SSL routines:ssl3_get_record的深度排查与解决方案 当你正专注于某个开源项目&#xff0c;准备通过git clone获取代码时&#xff0c;突然遇到SSL routines:ssl3_get_record:wrong version number的错误提示&#xff0c;这种突如其来的技术障碍往往会打乱开发节奏。…...

OpenClaw智能体的涌现与异化——复杂系统演化、知识权力重构与文明纪元跃迁(第五篇)

OpenClaw智能体的涌现与异化——复杂系统演化、知识权力重构与文明纪元跃迁&#xff08;第五篇&#xff09;摘要历经前四篇从技术解构、生态经济、微观政治到行动智能范式的层层剥茧&#xff0c;我们对OpenClaw的认知已从“爆火的开源工具”深入至“权力与信任重组的实验场”。…...

p,np,np难问题

文章目录1.预备知识1.1多项式1.3约化1.4Hamilton回路2.p类问题&#xff08;polynominal&#xff0c;多项式&#xff09;2.1定义&#xff1a;一个可以在多项式时间复杂度内解决的问题。2.2举例&#xff1a;n个数的排序问题&#xff08;不超过O(n2)&#xff09;3.np问题&#xff…...

学习笔记 - SCI/时钟与脉冲机制

1.核心基础概念1.1频率&#xff08;Frequency&#xff0c;Hz&#xff09;每秒发生多少次周期性变化1 Hz 1 次 / 秒 1 MHz 100万 次 / 秒本质描述“变化速度”1.2周期&#xff08;Period&#xff0c;T&#xff09;一次完整变化所需时间T 1/f常见换算频率周期1 MHz1 μs8 MHz0…...

AutoCAD字体缺失终结者:FontCenter插件完整使用指南

AutoCAD字体缺失终结者&#xff1a;FontCenter插件完整使用指南 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 你是否经常在打开AutoCAD图纸时遇到字体缺失的困扰&#xff1f;FontCenter正是为解决这一…...

24 小时国际暗金 国际暗银实时行情 API 接口 PAXG PAXS 数据对接教程

摘要&#xff1a;本文分享一款支持 724 小时不间断推送的国际暗金、国际暗银行情 API 接口&#xff0c;脉动数据行情平台提供 WebSocketHTTP 双模式对接&#xff0c;含完整接入代码、字段说明与对接注意事项&#xff0c;适合量化交易、行情展示、风控系统直接使用&#xff0c;新…...

Java 代码质量与静态分析最佳实践 2027

Java 代码质量与静态分析最佳实践 2027 引言 在现代 Java 开发中&#xff0c;代码质量已经成为决定项目成败的关键因素之一。随着项目规模的不断扩大和团队协作的日益复杂&#xff0c;如何保证代码质量、提高开发效率、减少 bug 数量成为了每个 Java 开发者必须面对的挑战。本…...