Я столкнулся с интересной проблемой и задавался вопросом, как и как это можно сделать в Java: Создайте метод, который может memoize любой функции/метода. Метод имеет следующие аргументы: метод/функция и аргумент (ы) для него.Метод Java memoization
Для примера скажу, у меня есть этот метод:
int addOne(int a) { return a + 1;}
и я называю свой метод запоминания два раза с теми же аргументами: AddOne и 5, например, первый вызов должен фактически вызвать метод AddOne и возврат результат, а также сохраните этот результат для данного аргумента. Второй раз, когда я вызываю это, должен знать, что это было вызвано раньше и просто просмотрел предыдущий ответ.
Моя идея состояла бы в том, чтобы иметь что-то вроде HashMap<Callable,HashMap<List<Objects>,Object>>
, где вы сохраните предыдущие ответы и посмотрите их позже. Я думаю, что это может быть как-то сделано с лямбда-выражениями, но я не знаком с ними. m не совсем уверен, как написать этот метод и будет признателен за некоторую помощь.
Можно ли это сделать с помощью этого подхода?
Возможный дубликат [Каковы различные методы для memoization в Java?] (Http://stackoverflow.com/questions/3623754/what-are-the-different-techniques-for-memoization-in-java) – tddmonkey
Изучите механизмы проксирования с помощью Java. Вы можете создать прокси объекта, который перехватывает вызовы методов, сохраняя возвращаемое значение. Если вы вызываете метод с теми же аргументами, что и предыдущий вызов, вы получите тот же результат без необходимости ссылаться на базовый метод. Весеннее кэширование делает это для вас. –