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