0

だから私は、2 つのフローの最新の結果を結合し、それで何かをしたいというシナリオがあります。

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

特定の条件では、結果を再度取得し、以前とは異なることを実行できるようにする必要があります。したがって、combinelatest の結果を手動でどこかに保存し、それらを再利用することもできますが、3 番目のフロー可能オブジェクトを追加し、onNext を手動でトリガーして、結果が再び伝播されるようにする方法があるのではないかと考えていました。これは可能ですか?

4

1 に答える 1

1

後で使用するために計算値を保持するには、2 つの方法があります。BehaviorSubject定義時に計算値を持つ中間変数として機能するを作成したりpublish()、新しいサブスクライバーが最新の結果を取得できるようにオブザーバブルを作成したりできます。

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);
于 2017-10-20T17:53:07.670 に答える