我有可以返回空值的函数:
def func(arg: AnyRef): String = {
...
}
我希望将结果添加到列表中,如果它不是null:
...
val l = func(o)
if (l != null)
list :+= l
....
或
def func(arg: AnyRef): Option[String] = {
...
}
...
func(o).filter(_ != null).map(f => list :+= f)
...
但它看起来太重了。
有没有更好的解决方案?
答案 0 :(得分:33)
您只需将该选项附加到列表即可。这是因为Option
可以被视为Iterable
(None
为空,Some
只有一个元素),这要归功于隐式转化Option.option2Iterable
。
因此对于选项变体(func
的第二个版本),只需执行:
list ++= func(o)
对于其他变体(func
的第一个版本),您可以先使用func
将Option.apply
的返回值转换为选项(将null
转换为{{ 1}}或者用None
包裹值,然后像上面那样。这给出了:
Some
答案 1 :(得分:0)
首先,您应该指出该函数可能/可能不会返回返回值包含在Some
或None
中的值
def func(arg: AnyRef): Option[String] = {
// ...
Some(value) orElse None
}
使用func(0)val list = func(0) collect {case Some(x) => x}
中的列表,该列表仅采用使用collect定义的值。