在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)
。