Kotlin:在lambda中检查结果

时间:2019-07-03 11:23:57

标签: kotlin lambda

我有lambda表达式:

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

,依此类推。执行第一行后,我需要检查数据。例如,检查结果列表是否为空。如果为空,则返回其他对象或引发异常。如果不为空,则进一步运行表达式。但是我想在表达式中检查它。

请提供建议,如何做。

1 个答案:

答案 0 :(得分:2)

您可以使用also()对对象执行其他操作,同时返回自身:

由于also()是内联函数,因此Kotlin允许您使用非本地返回值从lambda内部退出当前函数。

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 { ... }