反应编程 – 在Flux和Mono中的compose()与transform()vs. as()与map()

最近,我决定尝试使用 projectreactor.io的spring 5(io.projectreactor:reactor-test:jar:3.1.1).

有谁知道使用这个功能的最佳情况是什么?使用它们以及应该在哪里使用它们有什么缺点和优点?

好的例子会有所帮助.

这里有两种截然不同的操作符类别:

从事Flux本身的运算符

转换和组合用于代码共享

当您定期组合运算符链并且在应用程序中有共同的运算符使用模式时,您可以通过使用compose和transform来共享此代码或为其提供更具描述性的名称.

两者之间的区别在于应用了共同运算符:transform在实例化时应用它们,而compose在订阅时应用它们(允许动态选择添加的运算符).

有关更多详细信息和示例,请查看reference documentation.

这是一个方便的快捷方式,可以将函数应用于整个Flux,同时保持整个代码的流畅风格.一个例子是转换为Mono(如javadoc中所示),但它也可以帮助以工厂方法样式实现的外部运算符.

以reactor-addons MathFlux为例,并比较:

MathFlux.sumInt(Flux.range(1,10)
                    .map(i -> i + 2)
                    .map(i -> i * 10))
        .map(isum -> "sum=" + isum);

至:

Flux.range(1,10)
    .map(i -> i + 2)
    .map(i -> i * 10)
    .as(MathFlux::sumInt)
    .map(isum -> "sum=" + isum)

(这可以帮助您处理这样一个事实:与Kotlin不同,Java没有扩展方法:))

处理通过Flux的数据的运算符

map是关于数据的.它将1-1转换函数应用于源中的每个元素,因为它们变得可用.

在上面的MathFlux示例中,map连续用于向每个原始整数添加2,然后再次将序列中的每个数字乘以10,然后在结尾处第三次生成每个和的字符串.

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...