2

我有一个包含地图的类。我有一个惰性 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
   }
}
4

2 回答 2

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
}
于 2013-01-15T00:26:45.577 回答
0

您无法控制lazy valRHS 的评估策略,它们是严格的一次性评估。

您的分组地图是私有的,因此我假设您不允许该 Map 实例本身泄漏。在这种情况下,您可以根据Map您需要的任何策略使可变并重置/重新生成其内容。

于 2013-01-15T00:00:18.040 回答