私はオブジェクトを作成する高価な計算をしていると言います。私は発信者にどこでそれが起こるかについて柔軟性を与えたい、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回だけ発生するようにしたい場合は、私がここで探しているパターンは何ですか?
[Single.cache()](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html#cache--)を見ましたか? – akarnokd
シングルトンパターン? – tolpp
@akarnokdどうしたらうまくいくのですか? 'Single.fromCallable(c).cache()'?もしそうなら、それを答えて、私はそれを受け入れます。 –