Advanced RxJava

NEVER STOP

全新 Completable API(一)

原文 The new Completable API (part 1)。 介绍 如果大家关注 GitHub 上 RxJava 的动态,那可能已经注意到有一个关于 rx.Completable 类的 PR。这个 PR 已经被合入了 1.x 分支(被标记为 @Experimental),并极有可能成为 1.1.1 版本的一部分。 在接下来的两篇文章中,我将首先介绍 Completable ...

Asynchronous Event Streams vs. Reactive-Streams

原文 Asynchronous Event Streams vs. Reactive-Streams。 介绍 最近我在 EclipseCon 上看了一场很有意思的演讲,Asynchronous Event Streams – when java.util.stream met org.osgi.util.promise!(演讲视频,规范文档)OSGi 的兄弟们也想更好地解决异步编程的问题...

Reactive Stream 各实现的对比(一)

原文 Comparison of Reactive-Streams implementations (part 1)。 介绍 Reactive-Streams 最近在并发/并行技术圈越来越知名,也出现了好几个不同的实现,最值得关注的包括:Akka-Streams,Project Reactor 和 RxJava 2.0。 在本文中,我将展示如何利用这些库实现简单的数据流,并且用 JMH...

ConnectableObservables(三)

原文 ConnectableObservables (part 3)。 介绍 在上一篇中,我们编写了一个当所有下游的 Subscriber 都请求了一定数量之后,就把数据发往下游的 ConnectableObservable,这让所有下游的 Subscriber 保持步调一致。 在本文中,我将具体展示如何编写一个重放的版本:ReplayConnectableObservable。它的类...

ConnectableObservables(二)

原文 ConnectableObservables (part 2)。 介绍 在本系列上一篇文章中,我展示了怎样实现一个简单的 ConnectableObservable,它在连接之后,利用 Subject 把事件转发给所有的 Subscriber。 这一实现的主要问题是缺乏“请求管理”(request coordination,即 backpressure 支持),所有的数据流都运行...

深入理解 Operator:AutoConnect

原文 Operator internals: AutoConnect。 介绍 autoConnect 操作符是 ConnectableObservable 类的一部分,它允许我们在一定数量的 Subscriber 订阅(返回的 Observable)之后,自动连接原来的 ConnectableObservable。这个操作符返回的就是一个普通的 Observable,因此我们可以更容易地...

ConnectableObservables(一)

原文 ConnectableObservables (part 1)。 介绍 前面我们已经讲解了怎么创建 cold Observable,例如 range,以及怎么创建 hot Observable,例如 UnicastSubject,但还没有涉及这两者之间的转换。 显然,由于 Subject 也是 Observable,我们只能把 Subject 订阅到一个 cold Observa...

深入理解 Operator:All,Any 和 Exists

原文 Operator internals: All, Any, Exists 介绍 all 这个操作符,会检查上游发出的所有数据是否都满足给定的条件(predicate),如果有任何一个数据不满足条件,就立即发出 false 然后结束,如果所有数据都满足条件(或者没有数据),就会发出 true 后结束。而 any 则和 all 在逻辑上相反,只要有一个数据满足条件,就立即发出 true...

深入理解 Operator:Amb 和 AmbWith

原文 Operator internals: Amb, AmbWith 介绍 amb 是 ambiguous 的缩写,它的输入是一个 Observable 集合,输出的是转发第一个发出事件的 Observable 的所有后续事件,并且取消订阅其他所有的 Observable,也会忽略它们的任何事件。amb 支持 backpressure。 从编写操作符的角度出发,我们需要考虑以下几个属...

深入理解 Operator:开篇

原文 Operator internals: introduction 开发操作符通常来说都不是一个傻瓜式的活。在这个 Advanced RxJava 系列博文中,我尽可能多地涵盖了我们用到的一些基础内容,以及在开发操作符的过程中得到的经验。 但是 RxJava 有将近 150 个不同的操作符,而它们中的大多数都有些自定义的逻辑,或者说超出常规的逻辑。这些内容都是很难甚至不可能用通用的方...