Kotlin Результат разбивки на страницы по результатам API - PullRequest
0 голосов
/ 28 января 2020

Я использую Результат (не встроенный 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 по крайней мере что-то вроде монады), но я не знаю достаточно, чтобы знать наверняка.

...