我有lambda表达式:
repository!!.getAllByDateForUser(userId, date)
.map { ... }
.flatMap { ... }
,依此类推。执行第一行后,我需要检查数据。例如,检查结果列表是否为空。如果为空,则返回其他对象或引发异常。如果不为空,则进一步运行表达式。但是我想在表达式中检查它。
请提供建议,如何做。
答案 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 { ... }