【问题标题】:Scala map validationScala 地图验证
【发布时间】:2017-11-03 15:55:14
【问题描述】:

我的程序收到一个 scala 映射,要求是验证这个映射(键值对)。例如:验证键值,将其类型从字符串转换为 int 等。在极少数情况下,我们会在将映射传递到下层之前更新键。 它并不总是需要更新此映射,但只有当我们检测到有任何不受支持的键或值时才需要。 我正在做这样的事情:

private def updateMap(参数: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 _ => ("","")
}

} 像这样,代码增加了进行验证并将键/值转换为支持的键/值。 有没有更简洁的方法在 Scala 中对地图进行验证?

问候

【问题讨论】:

  • 用更多细节编辑了问题

标签: scala apache-spark dataframe scala-collections


【解决方案1】:

根据我从您的问题中了解到,match case 可以成为您的解决方案

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条件

【讨论】:

  • 感谢您的更新,我已经用我当前的验证键和值的代码编辑了我上面的帖子,只是想知道是否有更简洁的方法来执行此操作,因为我当前的代码在我检查时不断增加更多键和值
  • kv.keySet.contains(STR) match { case true 可以缩短为 if (kv.contains(STR)) ...
  • @Garipaso,我已经更新了我的答案。但是你不应该用完全改变来更新这个问题。您应该发布另一个问题,因为您已经接受了我在这个问题中的回答。从下次开始这样做。 :)
  • 谢谢,我已经发布了另一个问题。
  • @Garipaso 实际上你不应该发布另一个问题。我看到了,也回答了。现在看来您对此有重复的问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
相关资源
最近更新 更多