В книге функционального программирования в Java с помощью Venkat Субраманиам, то Автор дает нам пример memoizer, который прекрасно работает, рядом я оставить реализацию класса memoizer:Функциональное программирование в Java Venkat Субраманиам memoizer
public class Memoizer {
public static <T,R> R callMemoizer(final BiFunction< Function<T,R>,T,R> function, final T input){
Function<T,R> memoized = new Function<T,R>(){
HashMap<T,R> store = new HashMap<>();
@Override
public R apply(T input) {
return store.computeIfAbsent(input, key -> function.apply(this, key));
}
};
return memoized.apply(input);
}
}
Итак, вот мой вопрос, не будет ли функция memoized создаваться в каждом вызове метода callMemoizer? я предполагаю, что не потому, что другие способы хранения HashMap не будут хранить все значения ... пожалуйста, объясните мне, как и почему этот фрагмент кода работает ...