2017-09-07 13 views
0

キーが存在しない場合、マップキーを追加または更新するためのベストプラクティスは何ですか? たとえば、このコードは例外をスローします。エントリが存在しない場合キーが存在しない場合にマップキーを追加または更新するベストプラクティス

val states = scala.collection.mutable.Map[Int, String]() 
states(1) = "Alaska" 
states(2) = states(2) + " A Really Big State" // throws null pointer exeption 

おかげ

+0

変更可能なマップを使用している場合は(おそらくありません)、javaの 'ConcurrentHashMap'を使用してください。少なくとも、スレッドセーフです。 'putIfAbsent'と' computeIfAbsent'も持っています。 – Dima

答えて

0

これをどのように機能するかの例です:

val states = scala.collection.mutable.Map[Int, String]() 
states(1) = "Alaska" 
states.get(2) match { 
    case Some(e) => states.update(2, e + "A really Big State") 
    case None => states.put(2, "A really Big State") 
} 
1

は、あなたが行うことができます更新するには:ここでは

states.getOrElseUpdate(2, " A Really Big State") 

が、それはトリックを行う必要があります

val states = scala.collection.mutable.Map[Int, String]() 
val empty = states.get(2) // empty == None 
val bigState = states.getOrElseUpdate(2, "A Really Big State") // bigState == A Really Big State 
val stillBigState = states.getOrElseUpdate(2, "An even bigger state") // stillBigState == A Really Big State 
関連する問題