响应式编程的transform与merge

transform

transform的功能,如果用过jdk8的stream的话,应该没什么难度,和stream的用法几乎一致。

我们可以通过map来对flux/mono的结果进行转换,看下面的例子:

这里面User对象包含一个name字段,我们通过map方法对其中的内容进行了转换,和stream中的使用完全一致,但是一般在jdk8的stream中,我们一般是会用map做实际的类型转换,如果只是像上述一样把name转为大写而不改变列表结果的话,stream是提供了一个专门的peek方法可以处理的,但是在reactor3里面是没有这个方法的,稍显笨拙。

reactor中有两个方法可以进行类型转换,一个是map,另外一个是flatMapmap用于同步,flatMap用于异步处理,如果我们的转换方法是个rpc或者其他的外部接口调用(当然本地接口也可以使用),那我们就应该用flatMap这个异步方法来处理,调用起来没有任何区别,这里就不写示例了。

merge

字面意义应该就是到,merge就是把多个Publisher合并,直接看示例吧。

最后的sleep只是为了让我们可以看到结果而不是代码直接结束。

通过mergeWith方法,可以把两个Publisher合并,但是这里注意到,flux产生的a,会有个1秒的延迟,所以实际上的打印结果是b、a,我们要想让他完全按照顺序打印怎么办呢?可以用concatWith方法,这个方法是会等1秒a打印了之后再打印b,也就是有序处理。

另外,mergeWithconcatWith两个方法的参数都是Publisher,也就是说,通过这两个方法是可以把mono合并为Flux的,示例如下:

 

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: 响应式编程的transform与merge

发表评论

电子邮件地址不会被公开。 必填项已用*标注