tutorial software renault examples scala

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) .