如何在一行中获得Option的价值?

Ixx*_*Ixx 0 scala

基本上我想这样做:

val germanTranslation = translations.find(t => t.lang.equals("de")).get.value
Run Code Online (Sandbox Code Playgroud)

但可能是没有这样的翻译 - > find将返回None,并且get调用将抛出异常.

所以似乎使用getOrElse是合适的.但不知道它会如何运作.就像是:

val englishTranslation = translations.find(t => t.lang.equals("en")).getOrElse("")
Run Code Online (Sandbox Code Playgroud)

这个有2个问题 - getOrElse("")试图返回翻译或字符串,这是不正确的,而且,我需要的是翻译的值(字符串) - 而不是翻译对象.

有帮助吗?谢谢

kir*_*uku 6

没有新的答案,但因为这里还没有提到:

从2.10开始,组合物Option#map . Option#getOrElse可以替换为Option#fold:

val englishTranslation =
  translations.find(t => t.lang.equals("en")).fold("")(_.value)
Run Code Online (Sandbox Code Playgroud)


Lee*_*Lee 5

您可以使用Option.map将翻译选项映射到字符串选项,然后getOrElse在结果上使用Option[String]

val englishTranslation = translations
    .find(t => t.lang.equals("en"))
    .map(_.value)
    .getOrElse("")
Run Code Online (Sandbox Code Playgroud)