Как сравнить значение 3 варианта иерархии и вернуть логическое значение scala? - PullRequest
0 голосов
/ 30 января 2020

Допустим, у меня есть этот класс дел:

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

Теперь у меня есть опция отчета, и я хочу знать, если report.imagesInfo.status == "ready", но, как вы можете видеть, imagesInfo и status являются опциями, и я хочу вернуть логическое значение.

, поэтому я попробовал что-то вроде:

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

, но если статус не определен, это вернет None, и я хочу, чтобы он возвратил false ... есть scala способ сделать что-то подобное без связки isDefine?

спасибо

1 Ответ

4 голосов
/ 30 января 2020

Это вернет true, если и только если report.imagesInfo равно Some(Some("ready")):

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

И наоборот, это вернет истину, если report.imagesInfo не равно Some(Some(x)) и x не равно "ready":

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

Обратите внимание, что contains(x) эквивалентен exists(_ == x), но, как правило, более производительный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...