我有一个类似这样的列表List<Either<Failure, List<MyResult>>>
,并希望将其展平为Either<Failure, List<MyResult>>
使用 Arrow-kt,但我尝试过的所有内容似乎都很笨拙,最终遍历列表两次。感觉应该有更好的方法,但我无法弄清楚。这是我现在拥有的一个人为的例子:
val things : List<MyThing> = /* some stuff */
val results : List<Either<Failure, List<MyResult>>> = things.map { doThingThatReturnsEither(it) }
val successes : List<MyResult> = results.mapNotNull { it.orNull() }.flatten()
val firstFailure : Failure? = results.mapNotNull { it.swap().orNull() }.firstOrNull()
return firstFailure?.let {it.left()} ?: success.right()
欢迎任何建议!
things.map { }
额外的问题:如果其中一个人回来了,有没有捷径可走Left
?