2016-11-03 4 views
0

스칼라에서 변경 가능한 병렬 맵을 래핑하고 맵에서 단일 값을 제거하여 반환하려고합니다. 현재 구현은 다음과 같습니다 ...병렬, 변경 가능 맵에서 단일 값 제거 및 반환

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

변경 가능한 병렬 소리 재앙 ... 당신이 확신처럼 get 메소드에 의해 반환되는 Optioncollect을 사용할 수 있습니까? 예 : TrieMap을 통해? – Reactormonk

+0

@Reactormonk 단일 주 스레드 만 컨테이너에 액세스하지만 컨테이너 메소드가 병렬화 될 계획입니다. 그러나 당신의 요점을 이해하고 TrieMap을 살펴볼 것입니다 (이미'remove' 메소드가 있습니다). – davidrpugh

답변

0

당신이하지 더 나은 방법이

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