Существует много способов борьбы с типом 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