Javaでは、Boolean.valueOf(myString)
と書くことができます。しかし、Scalaではjava.lang.Boolean
がこの機能を持たないscala.Boolean
によって隠されています。ブール値の元のJavaバージョンを使用するように切り替えるのは簡単ですが、それはちょうど正しいとは限りません。スカラ:文字列をブール値にエレガントに変換
文字列からtrue
を抽出するための、スカラの1行の標準的なソリューションは何ですか?
Javaでは、Boolean.valueOf(myString)
と書くことができます。しかし、Scalaではjava.lang.Boolean
がこの機能を持たないscala.Boolean
によって隠されています。ブール値の元のJavaバージョンを使用するように切り替えるのは簡単ですが、それはちょうど正しいとは限りません。スカラ:文字列をブール値にエレガントに変換
文字列からtrue
を抽出するための、スカラの1行の標準的なソリューションは何ですか?
ああ、私は愚かです。答えはmyString.toBoolean
です。
myStringがnullの場合、コードがExceptionをスローします。次の応答方法が好きです。try(myString.toBoolean).getOrElse(false) –
注:new Boolean(myString)
はJavaで記述しないでください。常にBoolean.valueOf(myString)
を使用してください。 new
バリアントを使用すると、不必要にオブジェクトBoolean
が作成されます。 valueOf
の亜種を使用してもこれは実行されません。
myString.toBoolean
の問題はmyString.toLowerCase
が正確"true"
または"false"
の1(文字列でも、余分な空白を例外がスローされます)でない場合に例外をスローすることです。
java.lang.Boolean.valueOf
とまったく同じ動作をする場合は、完全修飾名を使用するか、ブール値を別の名前(例:import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)
)でインポートします。または、独自の特定の状況を処理する独自のメソッドを記述します(たとえば、"t"
をtrue
とすることもできます)。
これはどう:
import scala.util.Try
Try(myString.toBoolean).getOrElse(false)
入力文字列が有効なブール値false
に変換されない場合は例外をスローするとは対照的に、返されます。この動作は、Javaの動作であるBoolean.valueOf(myString)
に一層似ています。
私は今日、この1/0値セットをブール値にマッピングして楽しんでいます。私は1.4.1をスパークに戻す必要があった、と私は最終的にそれがで作業しました:
Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false))
P(11)がデータフレームのフィールドにある
私の以前のバージョンでは、「お試し」を持っていませんでしたこれはうまくいきます。
あなたの条件が 'true'または' false'を返すので、 'true' else''で' if'を使う必要はありません。必要なのは、 'Try(condition).getOrElse(false)'だけです。 – jwvh
単純に正規表現を使用してみませんか? –