Project Reactor操作符核心在于精准匹配场景:map用于同步一对一转换,flatMap处理异步或“一变多”,filter/take/skip裁剪流边界,handle灵活介入,transform封装复用链,reduce/collectList/collectMap按需归约。
Project Reactor 的操作符是构建响应式数据流的核心工具,尤其在转换(transform)和处理(process)环节,选对操作符、用对时机,直接决定逻辑是否清晰、资源是否可控、错误是否可追溯。
map 适用于一对一同步转换,比如把 String 转成 Integer、给对象添加时间戳。它不改变流的结构,也不引入异步或新序列。
flatMap 则用于“一变多”或需异步介入的场景,例如根据用户 ID 查询数据库返回 Mono
常见误用:用 map 包裹 WebClient 调用(返回 Mono),结果得到 Mono

响应式编程中,“少发比多拦更高效”。filter 在源头过滤条件不满足的元素;take(n) 只取前 n 项,常用于分页预览或限流采样;skip(n) 跳过开头 n 项,配合 take 可实现“第 m 到第 n 条”语义。
注意:filter 不会终止流,只筛掉不匹配项;若希望“首个匹配即停”,应配合 next() 或 singleOrEmpty() 使用。
handle 是低阶操作符,允许你对每个元素做任意判断:发出、跳过、甚至发出多个值或抛异常。它比 filter + map 组合更灵活,也比 flatMap 更轻量(不创建新 Publisher)。
transform 不操作数据本身,而是对整个 Flux/Mono 应用另一个操作符链,适合封装复用的处理流程(如统一日志、指标埋点、超时兜底)。
当需要把流“收口”为一个结果时,选择取决于目标结构和内存特性:
警告:collectList 在大数据流中易引发 OOM;若只需统计数量,优先用 count();若需分批处理,考虑 buffer 或 window 操作符。