最近,我决定尝试使用
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,然后在结尾处第三次生成每个和的字符串.