inline fun <T : Any, E : Any> batchQuery(
paramsToBeChunked: Collection<T>,
batchSize: Int = 500,
crossinline queryAction: (params: Collection<T>) -> List<E>
) = paramsToBeChunked.chunked(batchSize).flatMap { queryAction(it) }
Run Code Online (Sandbox Code Playgroud)
inline fun <T : Any, E : Any> batchQuery(
paramsToBeChunked: Collection<T>,
batchSize: Int = 500,
crossinline queryAction: (params: Collection<T>) -> List<E>
) = paramsToBeChunked.chunked(batchSize).map { queryAction(it) }.flatten()
Run Code Online (Sandbox Code Playgroud)
使用 flatMap 是否有潜在的问题?
恕我直言,map、flatten、flatMap 都是内联函数,所以这两个实现是等价的,对吗?
如果没有乐趣,inline那么在这两种情况下都queryAction必须在闭包中捕获,因为它来自 lambda 外部。这意味着在后台生成的类持有对该变量的引用,并且当最终执行 lambda 时,它会使用该引用。
但在这里,它内联得很好。Idea 尽力提供有关捕获变量的信息,但在这种情况下,这可能是 Idea 静态分析的限制。第一条消息是不正确的。
正如@broot 建议的,您可以.map { f(it) }仅替换为.map(f).
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |