Котлин: проверка результата внутри лямбды - PullRequest
0 голосов

У меня есть лямбда-выражение:

repository!!.getAllByDateForUser(userId, date)
                .map { ... }
                .flatMap { ... }

и так далее.Мне нужно проверить данные после выполнения первой строки.Например, убедитесь, что список результатов не пуст.А если он пуст, вернуть другой объект или выбросить исключение.Если он не пустой, я запускаю выражение дальше.Но я хочу проверить это в выражении.

Пожалуйста, совет, как это сделать.

1 Ответ

2 голосов
/ 03 июля 2019

Вы можете использовать also() для выполнения дополнительных операций над объектом при возврате самого себя:

Поскольку also() является встроенной функцией, Kotlin позволяет использовать нелокальные возвраты для выхода из текущей функции из лямбды.

repository!!.getAllByDateForUser(userId, date)
    .map { ... }
    .also { list ->
        if (list.isEmpty())
            return xy // exit function (not only lambda)
    }
    .flatMap { ... }

Конечно, вы можете сделать это в одной строке на цепочку вызовов, если вы предпочитаете этот стиль:

repository!!.getAllByDateForUser(userId, date)
    .map { ... }
    .also { if (it.isEmpty()) return xy }
    .flatMap { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...