【发布时间】:2017-09-04 09:30:00
【问题描述】:
我想用 RxJava 实现一个 EventBus,我需要粘性事件。我知道我可以使用 BehaviorSubject,但它只缓存最后一个发出的项目,而我想缓存所有按其类型(类名)不同的事件。还有另一种选择 - ReplaySubject 但是它有一个开销 - 它包含所有发出的元素。 有没有办法创建某种类型的 ReplaySubject,它只包含唯一的类型元素?
【问题讨论】:
-
您可以在将项目发送到
Subject之前对其进行过滤。因此,当它们在Subject中收到时,它们在类型上已经是唯一的了。 -
@masp 这是一个事件总线。它就像一个无限流。我不知道我会发出多少物品,所以在将它们发送给主题之前我无法收集和过滤
-
您想按类型缓存最新的元素吗?然后有多个 BehaviorSubjects 或 ReplaySubjects,每种类型一个,这也为您提供类型安全。
-
@akarnokd 不,我希望将所有元素发送到我的主题。但它们在类型上应该是唯一的。因此,如果我调用诸如 subject.onNext(a)、subject.onNext(b)、subject.onNext(a) 之类的东西,我希望缓存 [b, latest a]。我不需要类型安全,因为它是事件总线
-
由于并发效应增加,这种情况需要具有非平凡内部结构的自定义主题。我宁愿完全避免使用事件总线,因为无论如何它们都比 ReactiveX 倒退了一步。