如何迭代 List[Result] 和 return 一个 Boolean/Result?

How To iterate List[Result] and return one Boolean/Result?

我有一个Future[List[Result]] 我需要 运行 一个逻辑,例如如果列表中的所有项目都是 Result.Ok 那么 return Result.Ok (或 true),否则 return Result.BadRequest(或假)

我试过: futureResultList.map(temp => temp.forall(_ == true))

但此代码仅在列表包含布尔值时有效。如果它包含 Result 个对象,则它不起作用(更改时检查 to _ == Result.Ok

要return一个Boolean你只需要改变forall调用中的谓词:

futureResultList.map(_.forall(_ == Result.Ok))

概述此类示例的最简单方法是映射。如果您有一个结果列表,但需要一个布尔值列表,请映射它。不要害怕映射多次,它在长 运行 :)

中更具可读性
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 对象的相等性。但是映射对于在类型之间导航以及获得更清晰、更易读的代码通常很有用。