【WebFlux】第三篇 —— 常用操作符与数据流转换
操作符响应式流的“加工车间”在前面的笔记中我们学会了如何创建 Mono 和 Flux 数据流。但在真实的业务场景中数据往往需要经过清洗、转换、过滤或聚合。Reactor 提供了数百个操作符Operators来完成这些工作。你可以把操作符想象成工厂流水线上的各种加工机器它们接收上游的数据流经过处理后向下游输出新的数据流。本篇笔记将带你掌握最核心、最常用的几类操作符让你能够熟练地对数据流进行加工。转换操作符map 与 flatMap 的核心对决这是响应式编程中最重要也是最容易混淆的一对操作符。map同步 1对1 转换map 用于对流中的每个元素执行一个同步的转换函数。它的输入是一个元素输出也是一个元素数据流的数量保持不变。代码示例将字符串列表转换为它们的长度。Flux.just(Java,Spring,WebFlux).map(String::length)// 同步转换字符串 - 长度.subscribe(length-System.out.println(长度: length));// 输出: 4, 6, 7flatMap异步 1对N 转换flatMap 用于将一个元素转换为一个新的异步数据流Publisher然后将这些子流扁平化Flatten合并成一个新流。它的输入是一个元素输出是一个流。代码示例将每个单词拆分成单个字符。Flux.just(Hi,OK).flatMap(word-Flux.fromArray(word.split()))// 1个单词 - 包含多个字符的子流.subscribe(System.out::println);// 输出: H, I, O, K (注意flatMap不保证子流间的绝对顺序因为它是并发处理的)concatMap保证顺序的异步转换如果你既需要 flatMap 的异步转换能力又需要保证严格的顺序可以使用 concatMap。它会等待前一个子流完全处理完毕后才开始处理下一个子流。过滤操作符精准挑选数据当数据流中混杂了不需要的元素时过滤操作符就派上用场了。filter条件过滤只保留满足条件的元素。Flux.range(1,10).filter(num-num%20)// 过滤出偶数.subscribe(even-System.out.println(偶数: even));// 输出: 2, 4, 6, 8, 10distinct去重自动过滤掉流中重复的元素。Flux.just(1,2,2,3,3,4).distinct().subscribe(System.out::println);// 输出: 1, 2, 3, 4take 与 skip截取与跳过take(n) 只获取前 n 个元素拿完即关水龙头skip(n) 则跳过前 n 个元素。Flux.just(A,B,C,D,E).skip(2)// 跳过前2个.take(2)// 只取接下来的2个.subscribe(System.out::println);// 输出: C, D组合操作符拼接多根水管在实际开发中我们经常需要把多个数据流合并成一个。Reactor 提供了两种截然不同的组合方式merge / mergeWith交错合并将多个流合并为一个谁先产生数据谁就先往下游流。FluxStringflux1Flux.just(A1,A2).delayElements(Duration.ofMillis(100));FluxStringflux2Flux.just(B1,B2);Flux.merge(flux1,flux2).subscribe(System.out::println);// 输出可能是: B1, B2, A1, A2 (因为flux2没有延迟会先发射)concat / concatWith首尾相接严格按照顺序等第一个流完全结束后才开始流第二个流的数据。Flux.concat(flux1,flux2).subscribe(System.out::println);// 输出严格为: A1, A2, B1, B2zip / zipWith配对组合像“相亲”一样把两个流中相同位置的元素配对组合成一个元组Tuple。Flux.zip(Flux.just(张三,李四),Flux.just(18,25)).subscribe(tuple-System.out.println(tuple.getT1() 年龄: tuple.getT2()));// 输出: 张三 年龄: 18, 李四 年龄: 25聚合操作符将流收敛为单值有时候我们需要对整个流进行计算最终只输出一个结果。reduce聚合计算Flux.range(1,5).reduce((a,b)-ab)// 计算 12345.subscribe(sum-System.out.println(总和: sum));// 输出: 15collectList收集为集合将流中的所有元素收集到一个 List 中返回一个 MonoList。这在需要将响应式结果传递给不支持响应式的传统代码时非常有用。Flux.just(Apple,Banana).collectList().subscribe(list-System.out.println(收集结果: list));// 输出: [Apple, Banana]本篇小结掌握 map、flatMap、filter 和 merge/concat 是响应式编程的必修课。记住一个核心原则如果转换结果是一个普通对象用 map如果转换结果是一个新的 Mono/Flux用 flatMap。下一步预告数据流在流转过程中难免会遇到异常如网络超时、数据库报错。在响应式编程中传统的 try-catch 已经失效。下一篇笔记我们将深入探讨响应式流的异常处理机制并学习如何编写优雅的响应式单元测试。

相关新闻

2026AI学术工具短板排行榜|GPT/ Claude/ Gemini全翻车!唯一无短板免费毕设工具实测

2026AI学术工具短板排行榜|GPT/ Claude/ Gemini全翻车!唯一无短板免费毕设工具实测

2026年高校查重AIGC双检全面收紧,很多同学踩坑的核心原因:盲目跟风用热门通用AI做论文、毕设。 市面上爆火的GPT、Claude、Gemini、DeepSeek,看似功能强大,实则学术短板致命、定稿风险极高。能聊天、能写文案≠能写毕业论文、能过…

2026/7/22 4:24:34阅读更多 →
通义千问开源大模型实战指南:从入门到精通

通义千问开源大模型实战指南:从入门到精通

通义千问开源大模型实战指南:从入门到精通 【免费下载链接】Qwen The official repo of Qwen (通义千问) chat & pretrained large language model proposed by Alibaba Cloud. 项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen 通义千问&#xf…

2026/7/22 3:59:58阅读更多 →
2026深度测评10款降AIGC平台红黑榜!优缺点全曝光,达标率对标顶级水准

2026深度测评10款降AIGC平台红黑榜!优缺点全曝光,达标率对标顶级水准

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

2026/7/20 19:44:11阅读更多 →
嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

嵌入式系统异常与中断:内忧外患的底层处理机制与实战设计

1. 从“内忧外患”说起:理解系统运行的两种扰动做嵌入式或者底层系统开发的朋友,对“异常”和“中断”这两个词一定不陌生。它们就像是系统运行过程中遇到的两种“意外事件”,一个来自内部,一个来自外部,共同构成了我们…

2026/7/22 4:28:28阅读更多 →
OpenClaw2026跨平台安装部署指南:从环境配置到生产实践

OpenClaw2026跨平台安装部署指南:从环境配置到生产实践

最近在尝试部署AI开发环境时,发现OpenClaw作为新兴的AI开发平台,其安装部署过程对新手来说存在不少挑战。网上资料分散且版本混乱,特别是针对不同操作系统的兼容性问题经常让人头疼。本文基于官方最新文档,整理了一套完整的OpenCl…

2026/7/22 4:28:28阅读更多 →
Gitlab 任意文件读取漏洞(CVE-2016-9086)

Gitlab 任意文件读取漏洞(CVE-2016-9086)

GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,用于自托管的 Git 项目仓库。该漏洞源于程序在处理用户提供的文档时没有正确检查符号链接(软连接),导致目录遍历漏洞。攻击者可以利用该漏洞读取任意文件的内容。GitLab是一套…

2026/7/22 4:28:28阅读更多 →
门头招牌工程全流程:勘察、设计、施工与验收

门头招牌工程全流程:勘察、设计、施工与验收

摘要 门头招牌升级并不是简单更换面板、重新排版或安装发光字,而是一项同时涉及视觉识别、结构连接、材料耐候、电气安全、防水排水、施工组织和后期运维的综合工程。 部分门头在完工初期外观正常,但经过日晒、雨淋、温差变化和长期通电后,逐…

2026/7/22 4:28:28阅读更多 →
同样叫 Agent,为什么有的能进生产环境,有的只配留在 Demo 里?

同样叫 Agent,为什么有的能进生产环境,有的只配留在 Demo 里?

聊《同样是Agent,为什么有的能上线、有的只能演示?》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值…

2026/7/22 4:28:28阅读更多 →
技术团队中的工具人:从问题定位到自动化解决方案

技术团队中的工具人:从问题定位到自动化解决方案

那天下午,我盯着屏幕上一行行日志,试图定位一个诡异的线上问题。问题本身不复杂,但定位过程像在开一把生锈的锁——你知道锁芯就在那里,但就是找不到那个恰到好处的角度和力道。团队里有人提议直接重启服务,有人建议加…

2026/7/22 4:26:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →