我需要在读取数据文件后将一些字符串值转换为Ints.该字段可能为空,这会在尝试进行转换时导致错误.是否有一种简单的方法可以检查null(或者可以转换为整数的适当值),如果无法转换则只返回0?getOrElse似乎是一种可能性,但我不能完全理解写作.我可以写一个可以很容易地完成它的功能,但我希望有一个更优雅/简洁的方法来做到这一点.
你可以使用Trymonad(这里记录),它有一个getOrElse方法:
import scala.util.Try
val zero = Try { "foo".toInt }.getOrElse(0)
val leet = Try { "1337".toInt }.getOrElse(0)
val parseOrZero: String => Int = x => Try(x.toInt) getOrElse 0
val lines = Seq("123", "42", "sdfd", null, "")
lines.map(parseOrZero)
->> res0: Seq[Int] = List(123, 42, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
或者内联:
lines.map(x => Try(x.toInt) getOrElse 0)
Run Code Online (Sandbox Code Playgroud)
Try还有一个toOption方法,Some(value)如果成功,或者None在异常时获得.所以,如果你想过滤掉坏的条目而不是返回0,你可以这样做:
lines.flatMap(x => Try(x.toInt).toOption)
Run Code Online (Sandbox Code Playgroud)
Try还具有所有有用的monadic变换map,flatMap用于链接更多计算.
| 归档时间: |
|
| 查看次数: |
4470 次 |
| 最近记录: |