手动触发RxJava combinelatest可流动

时间:2017-10-20 16:33:24

标签: android rx-java2 combinelatest

所以我有一个场景,我想结合两个flowables的最新结果,并用它做点什么。

Flowable.combineLatest(
                info,
                list,
                BiFunction  {  ... }
        )

在某些情况下,我需要能够再次获得结果,并从之前做一些不同的事情。所以我可以在某处手动存储combinelatest的结果,然后只是重用它们但我在想,也许有办法添加第三个可流动的,并手动触发onNext,以便再次传播结果。这可能吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以保持计算值以供以后使用。您可以创建一个充当中间变量的BehaviorSubject,在定义时将具有计算值,或者您可以publish()可观察,以便较新的订阅者获得最新结果。

BehaviorSubject intermediateResult = BehaviorSubject.create();

Flowable.combineLatest(info, list, ...)
  .subscribe( intermediateResult );

可替换地,

Observable<Type> intermediateResult = Flowable.combineLatest(info, list, ...)
  .replay(1)
  .publish();

在任何一种情况下,订阅intermediateResult都会获得最新的计算值(如果存在)。

编辑:使功能可以随时选择:

Observable<FunctionSelector> fnSelector;

Observable<Type> intermediateResult = 
  Flowable.combineLatest(info, list, fnSelector, 
     (information, listToUse, selector) -> 
       getFunction(selector).apply(information, listToUse))
  .replay(1)
  .publish(1);