Suppliers.memoizeメソッド

Suppliers.memoizeの引数にSupplierインタフェースの実装クラスを設定する事で、
Suppilerのgetの結果をキャッシュする事ができます。
Supplierで複雑な計算をさせて、その値をキャッシュするため、計算は1度で済みます。

以下サンプルコードです。

class FibonacciSup implements Supplier<Integer> {

  @Override
  public Integer get() {
    System.out.println("compute start");
    return fibonacci(10);
  }

  private Integer fibonacci(Integer n) {
    if(n == 0) {
      return 0;
    } else if(n == 1) {
      return 1;
    } else {
      return fibonacci(n - 1) + fibonacci(n - 2);
    }
  }
}

キャッシュされているかを確かめるため、get()の直後にprintln文を挿入しました。

以下のコードで呼び出します。

Supplier<Integer> sup = Suppliers.memoize(new FibonacciSup());
System.out.println(sup.get());
System.out.println(sup.get());

出力は以下の通りです。
compute start
55
55

フィボナッチ数の計算結果55が最初でキャッシュされたため、get()が一度しか呼び出されない事が、
"compute start"が一度しか出力されない事で証明できたと思います。
最終更新:2014年01月12日 15:57
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。