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

Как получить доступ к значению карты с ключом, если ключ не найден в scala?

Предположим, что

var mp = Map[String,String]()

.....

val n = mp("kk")

Приведенное выше приведет к ошибке выполнения в случае, если ключ "kk" не существует.

Я ожидал, что n будет пустым, если ключ не существует. Я хочу, чтобы n было пустым, если ключ не существовал.

Каков правильный способ справиться с этой ситуацией в scala с помощью короткого примера кода?

4b9b3361

Ответ 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, как показано в ответе Дэйва.