【问题标题】:Scala Option to get the key valueScala Option 获取键值
【发布时间】:2021-01-23 03:09:40
【问题描述】:

有没有更好的方法来编写这段代码:

if (a == "value") map.get(key)
else None

map 是一个 Scala 映射,map.get(key)返回一个 Option[A] 值。

到目前为止我已经尝试过:

PartialFunction.condOpt(a == "value") {case true => map.get(key)}.flatten

【问题讨论】:

  • 目前的写法有什么问题?

标签: scala scala-collections


【解决方案1】:

TBH 我喜欢你上面写的方式:

if (a == "value") map.get(key)
else None

简洁明了,表达了意图。如果你真的不喜欢,我能想到的另一种方法是:

Option(a).filter(_ == "value").flatMap(_ => map.get(key))

【讨论】:

    【解决方案2】:

    在 Scala 2.13.x 中可用:

    Option.when(a == "value" && map.keySet(key))(map(key))
    

    或者...

    Option.when(a == "value")(map.get(key)).flatten
    

    【讨论】:

    • 为什么需要map.keySet(key)
    • 它比 map.isDefinedAt(key) 短,但不可否认,它的意图有点模糊。
    • 为什么需要在键空间中搜索键,map.get(key) 会告诉你它是否存在(通过返回一个选项)?
    • 这是真的。我们可以从Map 跳过那个测试和.get(),但是我们必须.flatten 结果。这是一种权衡。
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 2018-09-25
    相关资源
    最近更新 更多