我的問題與Kotlin arrow-kt Flatten nested Either有點相關,但也不完全是。
我有一個要映射的串列,在這個映射中我呼叫了一個回傳 Either 的函式。如果 Either 包含錯誤,我需要立即退出。
我目前有這樣的事情:
fun doSomethingWithUsers(userList: List<User>): Either<SomethingBadException, List<User>> =
userList
.map {
if (!isAlreadyProcessed(it)) {
processUser(it.userId).fold(
ifLeft = {
somethingBadException -> return@doSomethingWithUsers Either.Left(somethingBadException)
},
ifRight = { processedUser ->
User.createUser(processedUser)
}
)
} else it
}.let { Either.Right(it) }
有沒有替代品return@?有沒有更好的更慣用的方法來做到這一點?
我目前正在使用 v0.8.2 的 arrow-kt ,但我可能能夠更新到 1.0.1
謝謝你。
uj5u.com熱心網友回復:
您可以使用traverseEither來實作這一點。
fun processUser(user: User): Either<Error, User> = TODO()
val list: List<User> = TODO()
list.traverseEither { processUser(it) } // Either<Error, List<User>>
對于較舊的箭頭版本,請嘗試:
list.traverse(Either.applicative(), { processUser(it) }).fix()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/422377.html
標籤:
上一篇:將ID從配接器傳遞到新活動但為空
