2017-06-02 187 views
2

我的程序收到一個斯卡拉地圖,要求是驗證這個地圖(鍵值對)。例如:驗證鍵值,將其類型從字符串轉換爲int等。在極少數情況下,我們更新密鑰並將映射傳遞到向下層。 它並不總是需要更新此映射,但只有當我們檢測到有任何不支持的鍵或值時。 我在做一些這樣的事情:斯卡拉地圖驗證

私人高清updateMap(參數:地圖[字符串,字符串]):地圖[字符串,字符串] = {

parameters.map{ 

    case(k,v) => k match { case "checkPool" => 


    (k, (if (k.contains("checkPool")) 
     v match { 
     case "1" => "true" 
     case _ => "false" 
     } 
    else v)) 

    case "Newheader" => (k.replace("Newheader","header"),v) 
    case _ =>(k,v) 
    } 


    case _ => ("","") 
} 

} 這樣的代碼增加用於驗證並將鍵/值轉換爲支持的值。 有沒有一種更乾淨的方式在Scala中進行地圖驗證?

問候

+1

編輯更多的細節問題 – Garipaso

回答

0

據我從你的問題的理解,matchcase可以是你的解決方案

inOptions.map(kv => kv.keySet.contains(STR) match { 
    case true => mutable.HashMap(STR_UPDT->kv.get(STR).get) 
    case _ => kv 
}) 

編輯

既然你有更多的要求,更新你的問題,簡單的if else條件配對似乎是最好的選擇。

def updateMap(parameters: Map[String, String]): Map[String, String] = { 
    parameters.map(kv => { 
    var key = kv._1 
    var value = kv._2 
    if(key.contains("checkPool")){ 
     value = if(value.equals("1")) "true" else "false" 
    } 
    else if(key.contains("Newheader")){ 
     key = key.replace("Newheader", "header") 
    } 
    (key, value) 
    }) 
} 

您可以添加更多else if條件

+0

感謝您的更新,我已經編輯我的帖子上面我目前確認鍵和值的代碼,只是不知道是否有一個這樣做的更清潔的方式,因爲我現在的代碼不斷增加,因爲我檢查更多的鍵和值 – Garipaso

+0

'kv.keySet.contains(STR)match {case true'可以縮寫爲'if(kv.contains(STR))。 ..' –

+0

@加里帕索,我已經更新了我的答案。但是,您不應該完全更改這個問題。你應該發佈另一個問題,因爲你已經接受了我的答案。從下次開始。 :) –