scala - 使用 Option[List[Long]] 时用 None 替换空列表
问题描述
我有一些Seq[Strings]
需要转换为Option[Seq[Long]]
. 我正在使用以下内容:
val idsAsLongsUDF: Seq[String] => Option[Seq[Long]] = {
idsSeqStr: Seq[String] =>
import scala.util.Try
Try(idsSeqStr.flatMap(id => Try(id.toLong).toOption)).toOption match {
case Some(List()) => None: Option[Seq[Long]]
case x => x
}
}
问题是空列表返回为 Some(List()) 而不是 None - 这是正确的但不是我们所希望的。所以最后几行通过None
在找到空列表时返回来解决空列表问题。
我想得到Option[List[Long]]
这个试验数据建议的回报:
val s = Seq("abc", null) // None
val n : Seq[String] = null // None
val l = Seq("a", "1", "2") // Some(List(1,2))
有没有比我写的更优雅或更有效的方法?
解决方案
给这只猫剥皮的方法可能不止一种,优雅在旁观者的眼中,但我会这样写:
val idsAsLongsUDF: Seq[String] => Option[Seq[Long]] = { idsSeqStr =>
import scala.util.Try
Option(idsSeqStr)
.map(_.flatMap(id => Try(id.toLong).toOption))
.filterNot(_.isEmpty)
}
推荐阅读
- azure - ADF V2 - 基于表列参数化数据复制管道
- android - 权限拒绝:startForeground 需要 android.permission.FOREGROUND_SERVICE
- windows - 使用 UIElement 创建 Cordova UWP 插件
- android - 将滑动手势缩放添加到我的 Android 相机应用程序
- gitlab - 在 GitLab CI 中定义并行作业序列
- javascript - 如何使用jquery克隆隐藏和显示单击按钮上的删除按钮
- javascript - 如何从 @Html.Raw(Json.Encode(Model) 中删除 ESLint 解析错误
- java - 读取非常广泛的数据集性能优化
- javascript - 在文本中查找 Telnumber 和特定格式和电子邮件,我使用 javascript ReactJs
- spring - 使用 MOCKITO 测试 REST API