software - scala vs java
Scala: elegante conversión de una cadena en un booleano (5)
Ah, soy tonto. La respuesta es myString.toBoolean
.
En Java, puede escribir Boolean.valueOf(myString)
. Sin embargo, en Scala, java.lang.Boolean
está oculto por scala.Boolean
que carece de esta función. Es bastante fácil pasar a usar la versión Java original de un booleano, pero eso simplemente no parece correcto.
Entonces, ¿cuál es la solución canónica de una línea en Scala para extraer true
de una cadena?
El problema con myString.toBoolean
es que lanzará una excepción si myString.toLowerCase
no es exactamente uno de "true"
o "false"
(incluso un espacio en blanco adicional en la cadena provocará una excepción).
Si desea exactamente el mismo comportamiento que java.lang.Boolean.valueOf
, entonces java.lang.Boolean.valueOf
totalmente calificado o importe Boolean con un nombre diferente, por ejemplo, import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
. O escriba su propio método que maneje sus propias circunstancias particulares (por ej., Puede querer que la "t"
sea true
también).
Me he estado divirtiendo con esto hoy, mapeando un conjunto de valores 1/0 a booleano. Tuve que volver a Spark 1.4.1, y finalmente lo conseguí trabajando con:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
donde p (11) es el campo de marco de datos
mi versión anterior no tenía el "Try", esto funciona, otras formas de hacerlo están disponibles ...
Nota: No escriba new Boolean(myString)
en Java: siempre use Boolean.valueOf(myString)
. Usar la new
variante crea innecesariamente un objeto Boolean
; usar la variante valueOf
no hace esto.
Qué tal esto:
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
Si la cadena de entrada no se convierte a un valor booleano válido, se devuelve false
en lugar de arrojar una excepción. Este comportamiento se parece más al comportamiento de Java de Boolean.valueOf(myString)
.