Stream, RxJava, Reactor区别

 

Stream, RxJava, Reactor之比较

 

如果你熟悉Java 8,同时又了解反应式编程(Reactive Programming)框架,例如RxJava和Reactor等,你可能会问:

“如果我可以用Java 8 的Stream, CompletableFuture, 以及Optional完成同样的事情,为什么还要用RxJava 或者 Reactor呢?”

原因是:大多数时候你在处理的是简单的任务,这个时候你确实不需要那些反应式编程的库。但是,当系统越来越复杂,或者你处理的本身就是个复杂的任务,你恐怕就得写一些让自己头皮发麻的代码。随着时间的推移,这些代码会变得越来越复杂和难以维护。

RxJava和Reactor提供了很多非常趁手的功能,能够支持你在未来更轻松地维护你的代码,实现新需求。但是这个优势到底有多大,具体体现在哪些方面?没有标准无法比较,让我们定义8个比较的维度,来帮助我们理解Java 8的API以及反应式编程的库之间的差别。

  • Composable ------------(可组装)

  • Lazy ---------------------(延迟执行)

  • Reusable ----------------(可重用)

  • Asynchronous ----------(异步)

  • Cacheable ---------------(可缓存)

  • Push or Pull -------------(推还是拉)

  • Backpressure -----------(反压)

  • Operator fusion --------(操作融合)

针对上面这些维度,我们比较以下的这些类:

CompletableFuture

Stream

Optional

Observable (RxJava 1)

Observable (RxJava 2)

Flowable (RxJava 2)

Flux (Reactor Core)

准备好了吗?我们开始!

Composable(可组装)

上面所有的这7个类都是可组装的,支持函数式的编程方式,这是我们喜欢它们的原因。

CompletableFuture - 提供很多的.then*()方法,这些方法允许我们构建一个流水线,在不同的执行阶段之间传递一个单一的值(或者没有值),以及传递异常对象。

Stream - 提供很多的可以链式编程方式连接起来的操作,不同的操作阶段之间可以传递N个值。

Optional - 提供一些中间操作,如: .map(), .flatMap(), .filter().

Observable, Flowable, Flux - 跟Stream相同

Lazy(

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值