Как перебрать List [Result] и вернуть один Boolean / Result? - PullRequest
2 голосов
/ 16 июня 2019

У меня есть Future[List[Result]] Мне нужно запустить логику, например, если все элементы в списке Result.Ok, затем возвращают Result.Ok (или true), иначе возвращают Result.BadRequest (или false)

Я пробовал: futureResultList.map(temp => temp.forall(_ == true))

Но этот код работает только тогда, когда список содержит логические значения.Не работает, если в нем содержится Result объектов (при смене чека to _ == Result.Ok)

Ответы [ 2 ]

8 голосов
/ 16 июня 2019

Чтобы вернуть Boolean, вам просто нужно изменить предикат в вызове forall:

futureResultList.map(_.forall(_ == Result.Ok))
0 голосов
/ 16 июня 2019

Простейшим способом обзора такого примера является картирование.Если у вас есть список результатов, но вам нужен список логических значений, сопоставьте его.Не бойтесь многократного отображения, в долгосрочной перспективе это более читабельно:)

val futureResultList: Future[List[Result]] = ???
val futureBooleanList: Future[List[Boolean]] = futureResultList.map(_.map(_ == Result.OK))

val result = futureBooleanList.map(temp => temp.forall(_ == true))

или чуть более кратко:

val futureResultList: Future[List[Result]] = ???
val result = futureResultList.map(_.map(_ == Result.OK)
    .forall(_ == true))

и, конечно, как другие людиПредлагаю перейти непосредственно к проверке равенства на объекте Result.Но сопоставление часто полезно для навигации между типами и получения более четкого и читаемого кода.

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