Подтвердить что ты не робот

Scala: Элегантное преобразование строки в логическое

В Java вы можете написать Boolean.valueOf(myString). Однако в Scala, java.lang.Boolean скрывается scala.Boolean, которому не хватает этой функции. Достаточно легко перейти на использование исходной Java-версии логического, но это просто не кажется правильным.

Итак, каково однострочное каноническое решение в Scala для извлечения true из строки?

4b9b3361

Ответ 1

Ах, я глуп. Ответ myString.toBoolean.

Ответ 2

Как насчет этого:

import scala.util.Try

Try(myString.toBoolean).getOrElse(false)

Если входная строка не преобразуется в допустимое логическое значение, возвращается false, а не исключение. Это поведение более похоже на поведение Java Boolean.valueOf(myString).

Ответ 3

Примечание. Не пишите new Boolean(myString) в Java - всегда используйте Boolean.valueOf(myString). Использование варианта new без необходимости создает объект Boolean; использование варианта valueOf не делает этого.

Ответ 4

Проблема с myString.toBoolean заключается в том, что она генерирует исключение, если myString.toLowerCase не является точно одним из "true" или "false" (даже лишнее пустое пространство в строке вызовет исключение).

Если вы хотите точно такое же поведение, как java.lang.Boolean.valueOf, используйте его полностью, или импортируйте Boolean под другим именем, например import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString). Или напишите свой собственный метод, который обрабатывает ваши собственные конкретные обстоятельства (например, вы можете захотеть "t" быть true).

Ответ 5

Сегодня я получаю удовольствие от этого, сопоставляя набор значений 1/0 с логическим. Мне пришлось вернуться к Spark 1.4.1, и я, наконец, получил его работу:

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

где p (11) - поле dataframe

В моей предыдущей версии не было "Try", это работает, другие способы сделать это доступны...