2016-11-03 82 views
0

我正在用Scala包裝一個可變的並行映射,並想要從映射中刪除並返回一個值。目前的實施如下...從並行,可變映射中刪除並返回單個值

class MyContainer[O] { 

    def remove(uuid: UUID): Option[O] = backingStore.get(uuid) match { 
     case result @ Some(item) => backingStore -= item.uuid; result 
     case None => None 
    } 

    private[this] val backingStore: parallel.mutable.ParHashMap[UUID, O] 

} 

......但這似乎不雅。有沒有一種更習慣的方式來實現這一點?也許沒有模式匹配?

+0

可變的平行聽起來像是一場災難......你確定返回Option使用collect有沒有更好的辦法?例如。通過TrieMap? – Reactormonk

+0

@Reactormonk該計劃是隻有一個主線程將訪問該容器,但該容器方法將被並行化。但我明白你的意思,並將研究TrieMap(已經有一個'remove'方法)。 – davidrpugh

回答

0

可以由get方法

backingStore.get(uuid).collect { case Some(value) => 
backingStore -= item.uuid 
value 
}