2017-12-15 10 views
0

私はオブジェクトを作成する高価な計算をしていると言います。私は発信者にどこでそれが起こるかについて柔軟性を与えたい、subscribeOn()。しかし、私は副作用(例えば、オブジェクトが何らかの外部データストアに支えられているなど)のために、その計算を2回以上行うことも望まない。Singleから発行された値をどのようにメモしますか?

私は

MyObject myObject = MyObject.createExpensively(params); 
return Single.just(myObject); 

を書くことができますが、これは、呼び出し元のスレッドで高価な作業を行います。

私は

Callable<MyObject> callable =() -> MyObject.createExpensively(params); 
return Single.fromCallable(callable); 

を書くことができますが、これは複数のサブスクライバが含まれている場合、私が欲しいものではありませんこれは、サブスクリプションあたり後(副作用で)createExpensively()を呼び出します。

createExpensively()が1回だけ呼び出され、その副作用が1回だけ発生するようにしたい場合は、私がここで探しているパターンは何ですか?

+0

[Single.cache()](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html#cache--)を見ましたか? – akarnokd

+0

シングルトンパターン? – tolpp

+0

@akarnokdどうしたらうまくいくのですか? 'Single.fromCallable(c).cache()'?もしそうなら、それを答えて、私はそれを受け入れます。 –

答えて

1

あなたはSingle.cache()使用することができます

Single.fromCallable(() -> MyObject.createExpensively(params)).cache(); 
1
Single.fromCallable(() -> MyObject.createExpensively(params)).cache(); 

キャッシュ() - >現在のシングルとリプレイそれから後半SingleObserversに成功値や例外を格納します。詳細はhereをご覧ください。

+0

説明を追加して、問題の解決方法をご記入ください。 – Vagish

関連する問題