我有一个包含地图的课程。我有一个懒惰的val,它基本上包含以特定格式分组的地图。我想通过一种方法多次使用它,然后在某个时间点清除这个地图。我该如何做这样的事情。
实施例
class A(input: Map[key,value]) {
private lazy val mapgrouped = input.groupBy(_._1.a)
def useMap()
{
//use the mapgrouped Map multiple times
}
def clearMap()
{
// clear the mapgrouped field here
}
}
答案 0 :(得分:3)
除非你有特殊的性能要求,否则我建议选择var-of-immutable而不是val-of-mutable。前者允许安全发布:读者不一定获得最新版本的数据,但他们保证获得内部一致的快照,其他线程不能篡改。
在你的情况下,我可能会做这样的事情:
private var mMapGrouped: Option[Map[A,B]] = None
def useMap() {
val map = mMapGrouped.getOrElse {
val newMap = rebuildTheMap(...)
mMapGrouped = Some(newMap)
newMap
}
doStuffWith(map)
}
def clearMap() {
mMapGrouped = None
}
答案 1 :(得分:0)
您无法控制lazy val
的评估策略,它们是RHS的一次性评估。
您的分组地图是私有的,因此我假设您不允许Map实例本身泄露。在这种情况下,您可以使Map
变为可变,并根据您需要的任何策略重置/重新生成其内容。