Я использую Результат (не встроенный Result
) и хочу реализовать метод, который просматривает все результаты внешнего API.
В коде pusedo-i sh у меня есть что-то вроде этого:
fun getAllResults(): Result<List<Item>, Exception> {
val firstRequest: Request? = Request(page=1)
var r = Result.of(Pair(firstRequest, mutableListOf<Item>()))
while (r.component1() != null) {
r = r.flatMap { (r, a) ->
a.addAll(r.items)
if (r.hasMorePages) {
Result.of(Request(page=r.page + 1), a)
} else {
Result.of(null, a)
}
}
}
return r.fold({ s -> Result.success(s.second)}, { e -> Result.error(e) })
}
Фактический код, который у меня работает, работает, но мне он кажется совершенно неуместным, я чувствую, что мне не хватает хитрость и в том, что может быть какой-то другой способ связать Result
вместе - я думаю Я наступаю на пальцы какого-то функционального / монадиального c решения (насколько я понимаю Result
по крайней мере что-то вроде монады), но я не знаю достаточно, чтобы знать наверняка.