IMPLEMENTACJA
Klasa Memoizer jest prosta; przedstawiają listing 4.6.
Listing 4.6. Klasa Memoizer
public class Memoizer<T. U> {
private finał Map<T. U> cache = new ConcurrentHashMap<>(): private MemoizerO {}
public static <T. U> Function<T. U> memoize(Function<T. U> function) { return new Memoizer<T. U>().doMemoize(function): <—
}
Metoda memoize zwraca zapamiętaną wersję argumentu funkcji.
private Function<T. U> doMemoize(Function<T. U> function) { <-
return input -> cache.computelfAbsentCinput. function::apply):
}
Metoda doMemoize obsługuje obliczenia, wywołując w razie potrzeby oryginalną funkcję.