0

基本上我想这样做:

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

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

所以看起来使用getOrElse是合适的。但不知道它会如何工作。就像是:

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

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

有什么帮助吗?谢谢

4

3 回答 3

6

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

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

val englishTranslation =
  translations.find(t => t.lang.equals("en")).fold("")(_.value)
于 2013-02-03T19:53:30.083 回答
4

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

val englishTranslation = translations
    .find(t => t.lang.equals("en"))
    .map(_.value)
    .getOrElse("")
于 2013-02-03T17:34:29.397 回答
2

您可以使用 map 操作在您的选项中获得价值:

translations.find(t => t.lang.equals("en"))
            .map(_.value) // will get translation value if there is Some, 
                          // return None otherwise
            .getOrElse("")
于 2013-02-03T17:34:07.643 回答