我Either<E, List<A>>
从函数调用中收到一个,需要将其List<A>
转换为List<B>
. 每个 A 的转换返回一个Either<E,B>
,所以我的结果是一个Either<E, List<Either<E,B>>>
。我怎样才能把它Either<E, List<Either<E,B>>>
变成一个Either<E, List<B>>
,
Either.Left
如果所有转换都成功(如果单个转换失败,则应导致)- 创建一个
Either<E,List<B>>
包含所有 B,转换成功并忽略失败的 AtoB 转换
下面是一个小代码片段:
fun getListOfA(): Either<Exception, List<A>> {
TODO()
}
fun A.transformAtoB(): Either<Exception, B> {
TODO()
}
fun getListB(): Either<Exception, List<B>> {
return getListOfA().map {
// this is now Either<Exception, List<Either<Exception, B>>>
listOfA -> listOfA.map { it.transformAtoB() }
// ????? => Either<E, List<B>>
}
}