In Java können Sie schreiben Boolean.valueOf(myString)
. Allerdings ist in Scala java.lang.Boolean
verborgen, scala.Boolean
wodurch diese Funktion fehlt. Es ist einfach genug, auf die ursprüngliche Java-Version eines Booleschen Werts umzusteigen, aber das scheint einfach nicht richtig zu sein.
Was ist also die einzeilige, kanonische Lösung in Scala zum Extrahieren true
aus einer Zeichenfolge?
Antworten:
Ah, ich bin dumm. Die Antwort lautet
myString.toBoolean
.quelle
Try(myString.toBoolean).getOrElse(false)
wird durch die Arbeit des Werfens und Fangens der Ausnahme gehen.Option(myString).exists(_.toBoolean)
vermeidet diesen zusätzlichen Aufwand.Try(myString.toBoolean).getOrElse(false)
ist gut. Behandelt nicht übereinstimmende Zeichenfolgen sauber.Wie wäre es damit:
import scala.util.Try Try(myString.toBoolean).getOrElse(false)
Wenn die Eingabezeichenfolge nicht in einen gültigen Booleschen Wert konvertiert wird,
false
wird zurückgegeben, anstatt eine Ausnahme auszulösen. Dieses Verhalten ähnelt eher dem Java-Verhalten vonBoolean.valueOf(myString)
.quelle
Scala 2.13
eingeführtString::toBooleanOption
, die kombiniertOption::getOrElse
, bietet eine sichere Möglichkeit, aBoolean
als zu extrahierenString
:"true".toBooleanOption.getOrElse(false) // true "false".toBooleanOption.getOrElse(false) // false "oups".toBooleanOption.getOrElse(false) // false
quelle
Hinweis: Schreiben Sie nicht
new Boolean(myString)
in Java - verwenden Sie immerBoolean.valueOf(myString)
. Durch die Verwendung dernew
Variante wird unnötigerweise einBoolean
Objekt erstellt. Die Verwendung dervalueOf
Variante macht dies nicht.quelle
Das Problem dabei
myString.toBoolean
ist, dass eine Ausnahme ausgelöst wird, wenn diesmyString.toLowerCase
nicht genau einer von"true"
oder ist"false"
(selbst ein zusätzlicher Leerraum in der Zeichenfolge führt dazu, dass eine Ausnahme ausgelöst wird).Wenn Sie genau das gleiche Verhalten wie möchten
java.lang.Boolean.valueOf
, verwenden Sie es vollständig qualifiziert oder importieren Sie Boolean unter einem anderen Namen, zimport java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
. Oder schreiben Sie Ihre eigene Methode, die Ihre besonderen Umstände behandelt (z. B. möchten Sie es vielleicht"t"
sein)true
als auch).quelle
toLowerCase is done by
toBoolean`Ich habe heute Spaß damit gehabt und einen 1/0 Satz von Werten auf Boolean abgebildet. Ich musste auf Spark 1.4.1 zurückgreifen und habe es endlich zum Laufen gebracht mit:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
Dabei ist p (11) das Datenrahmenfeld
Meine vorherige Version hatte nicht das "Try", das funktioniert, andere Möglichkeiten sind verfügbar ...
quelle
if
mit dem,true else false
weil Ihre bedingte Rückgabetrue
oderfalse
. Alles was Sie brauchen istTry(condition).getOrElse(false)
.