Ответ 1
Существует много способов справиться с типом Option
. Прежде всего, однако, осознайте, насколько лучше иметь это вместо потенциальной ссылки null
! Не пытайтесь избавиться от него просто потому, что вы привыкли к тому, как работает Java.
Как недавно сказал кто-то другой: придерживайтесь его в течение нескольких недель, и вы будете стонать каждый раз, когда вам нужно вернуться к языку, который не предлагает типы Option
.
Теперь, по вашему вопросу, самый простой и рискованный способ:
mymap.get(something).get
Вызов .get
объекта Some
возвращает объект внутри. Однако он дает вам исключение во время выполнения, если вместо этого был None
(например, если ключ не был на вашей карте).
Более чистый способ - использовать Option.foreach
или Option.map
следующим образом:
scala> val map = Map(1 -> 2)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)
scala> map.get(1).foreach( i => println("Got: " + i))
Got: 2
scala> map.get(2).foreach( i => println("Got: " + i))
scala>
Как вы можете видеть, это позволяет выполнять оператор тогда и только тогда, когда у вас есть фактическое значение. Если вместо Option
None
ничего не произойдет.
Наконец, также популярно использовать сопоставление шаблонов в типах Option
следующим образом:
scala> map.get(1) match {
| case Some(i) => println("Got something")
| case None => println("Got nothing")
| }
Got something