Just like Stream
is a lazy Seq
, is there a lazy version of Map
?
What I want to do:
val lm = LazyMap[Int, String]((a) => {
println("only once")
(a * a).toString()
})
lm.get(10) // print "only once"
lm.get(10) // print nothing
Just like Stream
is a lazy Seq
, is there a lazy version of Map
?
What I want to do:
val lm = LazyMap[Int, String]((a) => {
println("only once")
(a * a).toString()
})
lm.get(10) // print "only once"
lm.get(10) // print nothing
mutable.Map
provides the methodgetOrElseUpdate(key: A, op: ⇒ B): B
. You could use that to implement lazy semantics.You should wrap the class in another class though, because else the value can be changed later by anyone who has the reference to that map.
You are basically asking for a cache. You might have a shot at using
scalaz.Memo
, which adds memoization to a given function. See http://eed3si9n.com/learning-scalaz/Memo.htmlThis would give something like:
Note however that what you get is a function, not a map. This means that you cannot test for the presence or absence of a given key, you can only apply. But if I am to trust your example, in your case this is exactly what you want.