Scala:将string转换为布尔值

在Java中,您可以编写Boolean.valueOf(myString) 。 然而在Scala中, java.lang.Booleanscala.Boolean隐藏,它缺less这个function。 切换到使用原始Java版本的布尔值是很容易的,但这看起来不正确。

那么Scala中的单行,规范解决scheme是如何从string中提取true的?

啊,我很傻。 答案是myString.toBoolean

这个怎么样:

 import scala.util.Try Try(myString.toBoolean).getOrElse(false) 

如果inputstring不转换为有效的布尔值,则返回false ,而不是抛出exception。 此行为更接近于Boolean.valueOf(myString)的Java行为。

注意:不要在Java中写入new Boolean(myString) – 总是使用Boolean.valueOf(myString) 。 使用new变体不必要地创build一个Boolean对象; 使用valueOf变体不会这样做。

myString.toBoolean的问题在于,如果myString.toLowerCase不是"true""false" (甚至string中的额外空白将导致引发exception)之一,则会引发exception。

如果你想要和java.lang.Boolean.valueOf完全一样的行为,那么使用它完全限定的名称,或者以不同的名字导入布尔值,例如import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString) import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString) 。 或者编写自己的方法来处理你自己的特定情况(例如,你也可以不true )。

今天我一直在玩这个,把一组1/2的值映射到布尔值。 我不得不恢复到Spark 1.4.1,我终于得到它的工作:

 Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false)) 

其中p(11)是dataframe字段

我以前的版本没有“尝试”,这个作品,其他方式做它可用…