本系列其他文章见:《响应式Spring的道法术器》。
前情提要:Reactor3快速上手 | 深入理解响应式流规范
本文测试源码
2.5 Reactor 3 Operators
虽然响应式流规范中对Operator(以下均称作”操作符“)并未做要求,但是与RxJava等响应式开发库一样,Reactor也提供了非常丰富的操作符。
2.5.1 丰富的操作符
本系列前边的文章中,陆续介绍了一些常用的操作符。但那也只是冰山之一角,Reactor 3提供了丰富的操作符,如果要一个一个介绍,那篇幅大了去了,授人以鱼不如授人以渔,我们可以通过以下几种途径了解操作符的应用场景,熟悉它们的使用方法:
- 附2中介绍了如何选择合适的操作符。
- 参考Javadoc中对Flux和Mono的解释和示意图。
- 如果想通过实战的方式上手试一下各种操作符,强烈推荐来自Reactor官方的lite-rx-api-hands-on项目。拿到项目后,你要做的就是使用操作符,完成“TODO”的代码,让所有的
@Test
绿灯就OK了。相信完成这些测试之后,对于常见的操作符就能了然于胸了。 - 此外,在日常的开发过程中,通过IDE也可以随时查阅,比如IntelliJ:
由于Project Reactor的核心开发团队也有来自RxJava的大牛,并且Reactor本身在开发过程中也借鉴了大多数RxJava的操作符命名(对于RxJava中少量命名不够清晰的操作符进行了优化),因此对于熟悉RxJava的朋友来说,使用Reactor基本没有学习成本。同样的,学习了Reactor之后,再去使用RxJava也没有问题。
2.5.2 “打包”操作符
我们在开发过程中,为了保持代码的简洁,通常会将经常使用的一系列操作封装到方法中,以备调用。
Reactor也提供了类似的对操作符的“打包”方法。
1)使用 transform 操作符
transform
可以将一段操作链打包为一个函数式。这个函数式能在组装期将被封装的操作符还原并接入到调用transform
的位置。这样做和直接将被封装的操作符加入到链上的效果是一样的。示例如下:
@Test
public void testTransform() {
Function<Flux<String>, Flux