メモ化が必要なようですね。Functional Javaの最新のトランク ヘッドにはP1
、結果がキャッシュされる計算をモデル化する memoising プロダクト タイプがあります。
次のように使用します。
P1<Thing> myThing = new P1<Thing>() {
public Thing _1() {
return expensiveComputation();
}
}.memo();
初めて _1() を呼び出すと、高価な計算が実行され、メモに保存されます。その後、代わりにメモが返されます。
「2 つのキー」の場合は、単純なペア タイプが必要です。Functional Java はこれも class の形で持っていますP2<A, B>
。このような値を記憶するには、単純に を使用しますP1<P2<A, B>>
。
Promise<A>
メモ化の代わりにクラスを使用することもできます。これはしばらくの間ライブラリにあったため、最新のバイナリが必要です。次のように使用します。
Promise<Thing> myThing =
parModule(sequentialStrategy).promise(new P1<Thing>() {
public Thing _1() {
return expensiveComputation();
}
});
結果を取得するには、単に を呼び出しますmyThing.claim()
。また、結果がまだ準備できていない場合でも、Promise<A>
関数を結果にマッピングするためのメソッドを提供します。
する必要がimport static fj.control.parallel.ParModule.parModule
ありfj.control.parallel.Strategy.sequentialStrategy
ます。計算を独自のスレッドで実行する場合は、クラスsequentialStrategy
によって提供される他の戦略のいずれかに置き換えます。Strategy