На Java можно писать Boolean.valueOf(myString)
. Однако в Scala java.lang.Boolean
скрыто, в scala.Boolean
котором отсутствует эта функция. Достаточно легко переключиться на использование исходной версии логического значения Java, но это кажется неправильным.
Так что же представляет собой однострочное каноническое решение в Scala для извлечения true
из строки?
Ответы:
Ах, я глупый. Ответ есть
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
, возвращается вместо создания исключения. Это поведение более похоже на поведение JavaBoolean.valueOf(myString)
.источник
Scala 2.13
IntroductionString::toBooleanOption
, который в сочетании сOption::getOrElse
, обеспечивает безопасный способ извлечения aBoolean
какString
:"true".toBooleanOption.getOrElse(false) // true "false".toBooleanOption.getOrElse(false) // false "oups".toBooleanOption.getOrElse(false) // false
источник
Примечание: не пишите
new Boolean(myString)
на Java - всегда используйтеBoolean.valueOf(myString)
. Использованиеnew
варианта без необходимости создаетBoolean
объект; использованиеvalueOf
варианта этого не делает.источник
Проблема
myString.toBoolean
заключается в том, что он выдаст исключение, еслиmyString.toLowerCase
это не совсем одно из"true"
или"false"
(даже лишний пробел в строке вызовет исключение).Если вы хотите точно такое же поведение , как
java.lang.Boolean.valueOf
, а затем использовать его полным или импортировать Boolean под другим именем, например,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
потому что ваши условные возвратыtrue
илиfalse
. Все, что вам нужно, этоTry(condition).getOrElse(false)
.