Scala:将string转换为布尔值
在Java中,您可以编写Boolean.valueOf(myString)
。 然而在Scala中, java.lang.Boolean
被scala.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字段
我以前的版本没有“尝试”,这个作品,其他方式做它可用…