2013-02-03 43 views
0

基本上我想這樣做:如何在一行中獲得Option的價值?

val germanTranslation = translations.find(t => t.lang.equals("de")).get.value 

但它可能是不存在這樣的翻譯 - >找到返回None,而get調用會拋出異常。

所以它似乎適合使用getOrElse。但不知道它會如何工作。喜歡的東西:

val englishTranslation = translations.find(t => t.lang.equals("en")).getOrElse("") 

這其中有2個問題 - getOrElse("")試圖返回翻譯或字符串,這是不正確,而且,我需要的是翻譯的值(字符串) - 不翻譯的對象。

任何幫助?由於

回答

4

您可以使用Option.map你的翻譯選項映射到一個字符串選項,然後對得到的Option[String]使用getOrElse

val englishTranslation = translations 
    .find(t => t.lang.equals("en")) 
    .map(_.value) 
    .getOrElse("") 
+0

完美,謝謝! – Ixx

2

您可以使用地圖操作您的選項裏面獲得價值:

translations.find(t => t.lang.equals("en")) 
      .map(_.value) // will get translation value if there is Some, 
          // return None otherwise 
      .getOrElse("") 
6

沒有新的答案,但因爲這裏還沒有提到:

自2.10組成Option#map . Option#getOrElse可以用Option#fold替換:

val englishTranslation = 
    translations.find(t => t.lang.equals("en")).fold("")(_.value)