2017-06-02 3 views
2

Mein Programm erhält eine Scala-Map, die Voraussetzung ist, diese Karte zu validieren (Schlüssel-Wert-Paare). Bsp: validiere einen Schlüsselwert, konvertiere seinen Typ von string nach int usw. In einem seltenen Fall aktualisieren wir den Schlüssel auch, bevor wir die Karte an die untere Ebene übergeben. Es ist nicht immer erforderlich, diese Karte zu aktualisieren, aber nur, wenn festgestellt wird, dass nicht unterstützte Schlüssel oder Werte vorhanden sind. Ich mache etwas, was wie folgt aus:Scala Map Validation

privaten def updateMap (Parameter: Map [String, String]): Map [String, String] = {

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 _ => ("","") 
} 

} dies wie der Code erhöht um die Validierung durchzuführen und die Schlüssel/Werte in unterstützte zu konvertieren. Gibt es eine sauberere Möglichkeit, diese Validierung in Scala für eine Karte durchzuführen?

Grüße

+1

die Frage mit mehr Details bearbeiten – Garipaso

Antwort

0

Nach dem, was ich aus Ihrer Frage verstanden, matchcase kann Ihre Lösung

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

Edited

Da Sie mit mehr Anforderungen, einfacher if else Zustand Ihre Frage aktualisiert werden Matching scheint die beste Wahl zu sein.

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) 
    }) 
} 

können Sie mehr else if Bedingungen hinzufügen

+0

Dank für das Update, ich habe meinen Beitrag bearbeiten oben mit meinem aktuellen Code von Schlüsseln und Werten Validierung, nur fragen, ob es eine ist Einfachere Methode, dies zu tun, da mein aktueller Code zunimmt, wenn ich nach mehr Schlüsseln und Werten suche – Garipaso

+0

'kv.keySet.contains (STR) match {case true' kann auf 'if (kv.contains (STR)) verkürzt werden. ..' –

+0

@Garipaso, ich habe meine Antwort aktualisiert. Aber Sie sollten diese Frage nicht mit einer vollständigen Änderung aktualisiert haben. Sie sollten eine andere Frage gestellt bekommen, da Sie meine Antwort bereits in dieser angenommen haben. Vom nächsten Mal mach es so. :) –