Option.map(null)返回Some(null)

MyT*_*tle 4 null scala

我希望这段代码片段返回给我None 而不是Some(null):

Option(x).map(x.getNullValue) // returns Some(null)
Run Code Online (Sandbox Code Playgroud)

我听说Scalaz库有处理这种情况的功能.那么我如何使用scalaz和标准的Scala库实现我的目标呢?

Ben*_*ich 6

你可以flatMapOption.apply这里使用方法而不是拉入scalaz:

Option(initialValue).flatMap(x => Option(x.getNullValue))
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为该Option.apply方法null智能化:

val x: String = null
Option(x) //None
Option("foo") //Some("foo")
Run Code Online (Sandbox Code Playgroud)

所以如果你完全知道价值,你可以简单地做:

Option(x.getNullValue)
Run Code Online (Sandbox Code Playgroud)

您也可以使用其他方法Option一样filter,orElse或者getOrElse,根据不同的情况:

Option(initialValue).map(_.getNullValue).filter(_ != null)
Option(initialValue).orElse(Option(x.getNullValue))
Option(x.getNullValue).getOrElse(defaultValue)
Run Code Online (Sandbox Code Playgroud)