2016-09-03 5 views
0

私はJSONをMap [String、Any]に解析しました.In JSON私はhasHeaderオプションフィールドを持っています。getOrElseをスカラーのMapで比較して値を比較する方法

{ 
hasHeader : "Y" (optional member) 

} 

私はhadHeaderはオプションであるため、getOrElseを使用しても安全ですが、どのように私はgetOrElseを使用して、Scalaで「Y」との値を比較します

If(jsonMap.get("hasHeader") <=> "Y") 
    doSome() 
else 
    Nothing 

を確認したいです。私は考えることができる

一つの方法は次のとおりです。

if(!jsonMap.get("hasHeader").isEmpty) { 
      val hasHeaderVal = jsonMap.get("hasHeader") 

     if(hasHeaderVal.equals("Y")){ 
       doSomething() 
      } 
     } 

は、これを行うのいずれかのより良い方法はありますか?

jsonMap.get("hasHeader").map(_ == "Y").getOrElse(false) 

方法Optionのための.map作品は、値がSome(そうNoneがちょうど通過する)である場合にのみ与えられた関数を適用することである:

答えて

3

次を探しています。次に.getOrElseは、Optionが呼び出された場合に値がSomeであるが、それ以外の場合は最初の引数(デフォルトバックアップの種類)を返します。

2

オプションでパターンマッチングを使用して、比較処理を実行できます。

ここでは、doSomethingの返品タイプがUnitであると仮定しています。あなたのdoSomething戻った場合

jsonMap.get("hasHeader") match { 
    case Some("Y") => doSomething() 
    case _ => 
} 

何か(Intとさせて頂きます)、その後、

def doSomething(): Int = 5 

// you can get option of your requirement like this 

val intOption = jsonMap.get("hasHeader") match { 
    case Some("Y") => Option(doSomething()) 
    case _ => None 
} 

// or 
val intOption = jsonMap.get("hasHeader") 
    .filter(_.equals("Y")) 
    .map(s => doSomething()) 

// or if you do not want an option and have a fallback value 10 
val int = jsonMap.get("hasHeader") 
    .filter(_.equals("Y")) 
    .map(s => doSomething()) 
    .getOrElse(10) 
関連する問題