scala - 如何将选项转换为无?

标签 scala monads option-type

考虑example

object Main extends App {
  case class ref(val target: Object)
  val map: Map[Int, ref] = Map(1 -> ref(null), 2 -> ref("2")) 
                                            //> map  : Map[Int,o.ref] = Map(1 -> ref(null), 2 -> ref(2))

  def request(id: Int, default: Object) = {
    println(map.get(id) map (_.target) match {
      case Some(result) => result
      case None => default
    })
  }                                         //> request: (id: Int, default: Object)Unit
  request(0, "fixed 0")                     //> fixed 0
  request(1, "fixed 1")                     //> null
  request(2, "fixed 2")                     //> 2
}

如您所见,选项 1 结果为 null。我希望这样的目标能够同样处理,数据库中没有匹配项。如何将 Some(null) 转换为 None

最佳答案

您可以使用过滤器:

map (_.target) filter (_ != null)

关于scala - 如何将选项转换为无?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34017527/

相关文章:

objective-c - 是否有用于 Objective-C 的 'andand' monad 版本?

haskell - 如何在 Haskell 中实现 fromJust 并迭代字符串列表

scala - 无法在foreachRDD中序列化SparkContext

scala - JMX 与 Play 2.XX 框架

haskell - Monadic 管道图分割流

ios - swift 3;使用非可选字符串附加可选字符串

Java 泛型 Lambda 编译错误

scala - Akka、 future 和临界区

class - 在包层次结构中具有重复名称的 Scala 包私有(private)

Haskell 如果其他