给定一个可能有效或无效的输入列表,是否有一种很好的方法来转换列表,但在给定一个或多个无效输入的情况下会失败,并在必要时返回有关这些无效输入的信息?我有这样的东西,但感觉很不雅。
def processInput(inputList: List[Input]): Try[List[Output]] = {
inputList map { input =>
if (isValid(input)) Left(Output(input))
else Right(input)
} partition { result =>
result.isLeft
} match {
case (valids, Nil) =>
val outputList = valids map { case Left(output) => output }
Success(outputList)
case (_, invalids) =>
val errList = invalids map { case Right(invalid) => invalid }
Failure(new Throwable(s"The following inputs were invalid: ${errList.mkString(",")}"))
}
}
有一个更好的方法吗?