Как получить доступ к значению карты с ключом, если ключ не найден в scala?
Предположим, что
var mp = Map[String,String]()
.....
val n = mp("kk")
Приведенное выше приведет к ошибке выполнения в случае, если ключ "kk" не существует.
Я ожидал, что n будет пустым, если ключ не существует. Я хочу, чтобы n было пустым, если ключ не существовал.
Каков правильный способ справиться с этой ситуацией в scala с помощью короткого примера кода?
Ответы
Ответ 1
Прежде всего, вы, вероятно, действительно не хотите нулевого значения, поскольку это почти всегда является признаком плохого кодирования в Scala. Вы хотите, чтобы n было типа Option [String], в котором говорится, что это значение является либо строкой, либо отсутствует. Правильный способ сделать это с помощью метода .get() на карте
val n = mp.get("kk")
Если вам действительно нужно null (например, для взаимодействия с библиотеками Java), вы можете использовать .getOrElse()
val n = mp.getOrElse("kk", null)
Ответ 2
Попробуйте следующее:
val valueOpt = mp.get("kk")
Ваш результат имеет тип Option[String]
и может быть либо None
, либо Some(actualValue)
. Вы можете использовать сопоставление образцов, чтобы узнать:
valueOpt match {
case Some(value) => println(value)
case None => println("default")
}
Более подходящий способ сделать такие вещи, однако, заключается в использовании методов на Option
, например:
println(valueOpt.getOrElse("default"))
Ищите документы API для Option
там.
Изменить: Обратите внимание: сам Map
непосредственно определяет метод getOrElse
, как показано в ответе Дэйва.