Scala:Succint检查null/empty值并返回0的方法

J *_*ath 2 scala

我需要在读取数据文件后将一些字符串值转换为Ints.该字段可能为空,这会在尝试进行转换时导致错误.是否有一种简单的方法可以检查null(或者可以转换为整数的适当值),如果无法转换则只返回0?getOrElse似乎是一种可能性,但我不能完全理解写作.我可以写一个可以很容易地完成它的功能,但我希望有一个更优雅/简洁的方法来做到这一点.

Ben*_*ich 8

你可以使用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用于链接更多计算.