2017-06-02 1 views
2

Mon programme reçoit une carte scala, les exigences sont de valider cette carte (paires clé-valeur). Ex: validez une valeur de clé, convertissez son type de chaîne en int etc. Dans de rares cas, nous mettons à jour la clé avant de passer la carte à la couche inférieure. Il n'est pas toujours nécessaire de mettre à jour cette carte, mais uniquement lorsque nous détectons des clés ou des valeurs non prises en charge. que je fais quelque chose comme ceci:Validation de carte Scala

updateMap def privée (paramètres: Carte [String, String]): Carte [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 _ => ("","") 
} 

} Comme cela augmente le code pour effectuer la validation et convertir les clés/valeurs en celles prises en charge. Existe-t-il une façon plus simple de faire cette validation dans Scala pour une carte?

Cordialement

+1

modifié la question avec plus de détails – Garipaso

Répondre

0

Selon ce que je comprends de votre question, matchcase peut être votre solution

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

Edité

Puisque vous mis à jour votre question avec plus d'exigences, condition simple if else correspondant semble être le meilleur choix.

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

Vous pouvez ajouter plus else if conditions

+0

Merci pour la mise à jour, j'ai édité mon post ci-dessus avec mon code actuel de validation des clés et des valeurs, juste se demander s'il y a un méthode plus propre de faire cela comme mon code actuel continue d'augmenter que je vérifie pour plus de clés et de valeurs – Garipaso

+0

'kv.keySet.contains (STR) match {case true' peut être raccourci à seulement si (kv.contains (STR)). ..' –

+0

@Garipaso, j'ai mis à jour ma réponse. Mais vous ne devriez pas avoir mis à jour cette question avec un changement complet. Vous devriez être posté une autre question car vous avez déjà accepté ma réponse dans celui-ci. À partir de la prochaine fois, faites-le. :) –