Javaでは次のように書くことができます Boolean.valueOf(myString)
。ただし、Scalaでは、この機能が不足java.lang.Boolean
しscala.Boolean
ているために隠されています。ブール値の元のJavaバージョンを使用するように切り替えるのは簡単ですが、それは正しくないようです。
ではtrue
、文字列から抽出するためのScalaの1行の標準的なソリューションは何ですか?
Javaでは次のように書くことができます Boolean.valueOf(myString)
。ただし、Scalaでは、この機能が不足java.lang.Boolean
しscala.Boolean
ているために隠されています。ブール値の元のJavaバージョンを使用するように切り替えるのは簡単ですが、それは正しくないようです。
ではtrue
、文字列から抽出するためのScalaの1行の標準的なソリューションは何ですか?
回答:
ああ、私はばかげています。答えはmyString.toBoolean
です。
Try(myString.toBoolean).getOrElse(false)
例外をスローしてキャッチする作業を行います。Option(myString).exists(_.toBoolean)
その余分な努力を回避します。
Try(myString.toBoolean).getOrElse(false)
は良いです。一致しない文字列をきれいに処理します。
これはどう:
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
入力文字列が有効なブール値に変換されない場合、false
例外をスローするのではなく、返されます。この動作は、のJava動作によく似ていますBoolean.valueOf(myString)
。
Scala 2.13
にString::toBooleanOption
結合されたintroducedは、を:としてOption::getOrElse
抽出する安全な方法を提供します。Boolean
String
"true".toBooleanOption.getOrElse(false) // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false) // false
の問題myString.toBoolean
はmyString.toLowerCase
、"true"
またはのいずれかではない場合に例外がスローされることです。"false"
(文字列に余分な空白がある場合でも、例外がスローされます)。
とまったく同じ動作が必要な場合はjava.lang.Boolean.valueOf
、完全修飾で使用するか、ブール値を別の名前(たとえば、)でインポートしimport java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
ます。またはあなた自身の特定の状況(例えば、あなたがしたいことがあり扱う独自のメソッドを書く"t"
ことtrue
も)。
toLowerCase is done by
toBoolean`
私は今日これを楽しんでいて、1/0の値のセットをブール値にマッピングしています。Spark 1.4.1に戻らなければならなかったのですが、ついに次のもので動作するようになりました。
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
ここで、p(11)はデータフレームフィールドです。
私の以前のバージョンには「試してみる」がありませんでした、これは機能します、それを行う他の方法が利用可能です...
if
であるtrue else false
ため、withは必要ありません。必要なのは。true
false
Try(condition).getOrElse(false)