Ответ 1
В основном вы запрашиваете кеш.
Возможно, вы захотите использовать scalaz.Memo
, который добавляет memoization к данной функции.
См. http://eed3si9n.com/learning-scalaz/Memo.html
Это даст что-то вроде:
val lm: Int => String = Memo.mutableHashMapMemo[Int, String] { a =>
println("only once")
(a * a).toString()
}
Обратите внимание, что вы получаете функцию, а не карту. Это означает, что вы не можете проверить наличие или отсутствие данного ключа, вы можете подать заявку. Но если я доверяю вашему примеру, в вашем случае это именно то, что вы хотите.