我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>>
}
}