【发布时间】:2021-02-26 20:54:56
【问题描述】:
我最近一直在使用 kotlin arrow,但遇到了一个让我卡住的特定用例。
假设我有一些对象的集合,我想使用转换函数将其转换为另一种数据类型。还可以说这个转换函数有失败的能力——但它不会抛出异常,它只会返回一个 Either,其中Either.Left() 是失败,Either.Right() 是映射对象。处理此用例的最佳方法是什么?下面是一些示例代码:
val list: Collection<Object> // some collection
val eithers: List<Either<ConvertError, NewObject>> = list.map { convert(it) } // through some logic, convert each object in the collection
val desired: Either<ConvertError, Collection<NewObject>> = eithers.map { ??? }
fun convert(o: Object) : Either<ConvertError, NewObject> { ... }
基本上,我想在数据集合上调用一个映射函数,如果任何映射以失败响应,我希望有一个包含错误的Either.Left()。否则,我希望 Either.Right() 包含所有映射对象。
有什么想法可以用一种干净的方式来做到这一点吗?理想情况下,我想进行一系列函数调用,但能够通过函数调用将错误向上渗透。
【问题讨论】:
标签: kotlin functional-programming arrow-kt