Scala: elegante conversie van een string naar een boolean

In Java kun je Boolean.valueOf(myString)schrijven. In Scala wordt java.lang.Booleanechter verborgen door scala.Booleandie deze functie niet heeft. Het is gemakkelijk genoeg om over te schakelen naar het gebruik van de originele Java-versie van een boolean, maar dat lijkt gewoon niet juist.

Dus wat is de eenregelige, canonieke oplossing in Scala voor het extraheren van trueuit een string?


Antwoord 1, autoriteit 100%

Ah, ik ben dom. Het antwoord is myString.toBoolean.


Antwoord 2, autoriteit 73%

Wat dacht je hiervan:

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

Als de invoerreeks niet wordt geconverteerd naar een geldige Booleaanse waarde, wordt falsegeretourneerd in plaats van een uitzondering te genereren. Dit gedrag lijkt meer op het Java-gedrag van Boolean.valueOf(myString).


Antwoord 3, autoriteit 16%

Scala 2.13introduceerde String::toBooleanOption, gecombineerd tot Option::getOrElse, biedt een veilige manier om een ​​Booleanals een Stringte extraheren:

"true".toBooleanOption.getOrElse(false)  // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false)  // false

Antwoord 4, autoriteit 7%

Opmerking: Schrijf new Boolean(myString)niet in Java – gebruik altijd Boolean.valueOf(myString). Het gebruik van de newvariant maakt onnodig een Booleanobject; het gebruik van de variant valueOfdoet dit niet.


Antwoord 5, autoriteit 5%

Het probleem met myString.toBooleanis dat het een uitzondering genereert als myString.toLowerCaseniet precies een van "true"is of "false"(zelfs extra witruimte in de tekenreeks zorgt ervoor dat er een uitzondering wordt gegenereerd).

Als je precies hetzelfde gedrag wilt als java.lang.Boolean.valueOf, gebruik het dan volledig gekwalificeerd, of importeer Boolean onder een andere naam, bijvoorbeeld import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString). Of schrijf uw eigen methode die uw eigen specifieke omstandigheden afhandelt (u kunt bijvoorbeeld willen dat "t"ook trueis).


Antwoord 6

Ik heb hier vandaag veel plezier mee gehad, waarbij ik een 1/0 set waarden toewijs aan boolean. Ik moest terug naar Spark 1.4.1 en ik heb het eindelijk werkend gekregen met:

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

waarbij p(11) het dataframeveld is

mijn vorige versie had niet de “Probeer”, dit werkt, andere manieren om het te doen zijn beschikbaar …

Other episodes