如何在Kotlin中执行并行flatMap?

如何在Kotlin中执行并行flatMap?,kotlin,coroutine,kotlinx.coroutines,Kotlin,Coroutine,Kotlinx.coroutines,我需要做平行平面图。 假设我有以下代码: val coll: List<Set<Int>> = ... coll.flatMap{set -> setOf(set, set + 1)} Kotlin不提供任何开箱即用的螺纹。 但您可以使用kotlinx.coroutines执行以下操作: coll.pFlatMap{set -> setOf(set, set + 1)} // parallel execution val coll: List<Set

我需要做平行平面图。 假设我有以下代码:

val coll: List<Set<Int>> = ...
coll.flatMap{set -> setOf(set, set + 1)}

Kotlin不提供任何开箱即用的螺纹。 但您可以使用kotlinx.coroutines执行以下操作:

coll.pFlatMap{set -> setOf(set, set + 1)} // parallel execution
val coll: List<Set<Int>> = ...
val result = coll
 .map {set -> 
    // Run each task in own coroutine,
    // you can limit concurrency using custom coroutine dispatcher
    async { doSomethingWithSet(set) } 
 }
 .flatMap { deferred -> 
    // Await results and use flatMap
    deferred.await() // You can handle errors here
 }
val coll:List=。。。
val结果=coll
.map{set->
//在自己的协同程序中运行每个任务,
//您可以使用自定义协程调度器限制并发性
异步{doSomethingWithSet(set)}
}
.flatMap{延迟->
//等待结果并使用flatMap
deferred.await()//您可以在此处处理错误
}

或者,您可以不使用协同程序:

fun <T, R> Collection<T>.pFlatMap(transform: (T) -> Collection<R>): List<R> =
    parallelStream().flatMap { transform(it).stream() }.toList()

您的问题到底是什么,您想让我们为您实现一个并行平面图?@m0skit0如何在Kotlin中实现并行平面图?这是我的问题。Kotlin在SDK中没有任何并行平面图,您必须自己实现它。您尝试过什么?您还可以使用Java8流
coll.parallelStream().flatMap{…}
注意,这并没有以任何方式利用协同程序,它只是在
coll.map{set->commonPool().submit(可调用的{doSoSomethingWithSet(set)}.flatMap{task->task.join()}之上添加了另一个无用的层
它只是一个抽象,但并非完全无用,您可以在多平台代码中使用它。另外,如果doSomethingWithSet没有阻塞,并且也有suspend函数,则可以在不阻塞线程的情况下使用此代码,通常只能从suspend上下文调用此函数,因此您也不希望完全阻塞与Java的
join()
的协程,因此除非您在多平台项目上或已经使用协程,仅仅为了这个,在项目中添加依赖项是没有意义的。
fun <T, R> Iterable<T>.pFlatMap(transform: (T) -> Iterable<R>): List<R> =
    toList()
        .parallelStream()
        .flatMap { transform(it).toList().stream() }
        .toList()