【发布时间】:2019-07-25 20:08:17
【问题描述】:
我一直想知道是否有机会使用map 运算符执行一些操作n 次的序列,但可以在“开始”处理期间终止该执行?这是我尝试使用 Kotlin 序列实现的命令式代码:
val offers = mutableListOf<String>()
for (pageNumber in FIRST_PAGE_NUMBER until numberOfPages) {
val offersInPage = findByPage(query, pageSize, pageNumber)
offers.addAll(offersInPage)
if(offersInPage.size == 5)
break
}
主要的是,当前一个响应满足某些条件时,我想挂起处理对外部服务的任何进一步请求。
当尝试以更具声明性的方式实现它时,我最终得到了这样的结果:
IntArray(numberOfPages)
.asSequence()
.map { findByPage(query, pageSize, it) }
.takeWhile { it.size == 5 }
.flatten()
.toList()
但是findByQuery方法被调用n次,然后结果被过滤。是否有任何运算符可以帮助我实现诸如在满足给定条件后终止该惰性操作之类的操作?
【问题讨论】:
标签: kotlin functional-programming sequence declarative