在Java中,您可以编写Boolean.valueOf(myString)。但是在Scala中,java.lang.Boolean隐藏了scala.Boolean缺少此功能的功能。切换到使用原始Java版本的布尔值很容易,但这似乎并不正确。
那么,Scala中用于true从字符串中提取的单行规范解决方案是什么?
在Java中,您可以编写Boolean.valueOf(myString)。但是在Scala中,java.lang.Boolean隐藏了scala.Boolean缺少此功能的功能。切换到使用原始Java版本的布尔值很容易,但这似乎并不正确。
那么,Scala中用于true从字符串中提取的单行规范解决方案是什么?
Answers:
啊,我很傻。答案是myString.toBoolean。
Try(myString.toBoolean).getOrElse(false)将处理引发和捕获异常的工作。Option(myString).exists(_.toBoolean)避免了额外的努力。
Try(myString.toBoolean).getOrElse(false)是好的。干净地处理不匹配的字符串。
这个怎么样:
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
如果输入字符串没有转换为有效的布尔值,false则返回与抛出异常相反的值。此行为更类似于的Java行为Boolean.valueOf(myString)。
Scala 2.13引入String::toBooleanOption,其组合,以Option::getOrElse提供一个安全的方式来提取Boolean作为String:
"true".toBooleanOption.getOrElse(false) // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false) // false
问题myString.toBoolean在于,如果myString.toLowerCase不完全是"true"或之一,它将引发异常"false"(即使字符串中多余的空格也会引发异常)。
如果您想要与完全相同的行为java.lang.Boolean.valueOf,请使用完全限定的行为,或以其他名称(例如)导入Boolean import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)。或编写自己的方法来处理自己的特定情况(例如,您可能也希望"t"这样true做)。
toLowerCase is done by toBoolean`
我今天很开心,将1/0的一组值映射到布尔值。我不得不恢复到Spark 1.4.1,终于可以使用它了:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
其中p(11)是数据框字段
我以前的版本没有“尝试”功能,此方法可行,其他方法也可以使用...
if使用,true else false因为您的条件返回值为true或false。您所需要的就是Try(condition).getOrElse(false)。