0

假设我有这个案例类:

case class Report(id: String, imagesInfo: Option[ImageStatus])
case class ImageStatus(status: Option[String])

现在,我有 Report 的选项,我想知道 if report.imagesInfo.status == "ready",但是你可以看到 imagesInfo 和 status 是选项,我想返回布尔值。

所以我尝试了类似的东西:

report.flatMap(_.imagesInfo.flatMap(_.status.map(_ == "ready")))

但是如果没有定义状态,这将返回None,我希望它返回false......有没有一种scala方法可以在没有一堆isDefine的情况下做这样的事情?

谢谢

4

1 回答 1

4

当且仅当report.imagesInfois时,这将返回 true Some(Some("ready"))

report.imagesInfo.exists(_.status.contains("ready"))

相反,这将返回 true ,除非report.imagesInfoisSome(Some(x))xis not "ready"

report.imagesInfo.forall(_.status.forall(_ == "ready"))

请注意,contains(x)它等效于exists(_ == x),但通常性能更高。

于 2020-01-29T21:16:06.083 回答