手动触发一个 RxJava combinelatest flowable

Manually trigger a RxJava combinelatest flowable

所以我有一个场景,我想结合两个可流动对象的最新结果并用它做一些事情。

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

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

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

BehaviorSubject 中间结果 = 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);