作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 scala 的新手,我正在尝试以一种干净的方式做这样的事情。
我有一个接受几个可选参数的方法。我想创建一个 map ,并且只有在可选参数有值的情况下才将项目添加到 map 中。这是一个虚拟示例:
def makeSomething(value1: Option[String], value2: Option[String], value3: Option[String]): SomeClass = {
val someMap: Map[String, String] =
value1.map(i => Map("KEY_1_NAME" -> i.toString)).getOrElse(Map())
}
在上面的这种情况下,我们正在做我想做的事,但前提是我们只关心 value1 - 我希望对所有可选值都这样做,并将它们放入映射中。我知道我可以做一些蛮力的事情:
def makeSomething(value1: Option[String], value2: Option[String], value3: Option[String]): SomeClass = {
// create Map
// if value1 has a value, add to map
// if value2 has a value, add to map
// ... etc
}
但我想知道 scala 是否有任何功能可以帮助我清理它。
提前致谢!
最佳答案
您可以创建一个 Map[String, Option[String]]
然后使用 collect
删除空值并从它们的包装中“提取”当前值 选项
:
def makeSomething(value1: Option[String], value2: Option[String], value3: Option[String]): SomeClass = {
val someMap: Map[String, String] =
Map("KEY1" -> value1, "KEY2" -> value2, "KEY3" -> value3)
.collect { case (key, Some(value)) => key -> value }
// ...
}
关于scala - 在 Scala 中,仅当存在可选值时才将项目添加到 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329996/
我是一名优秀的程序员,十分优秀!