我需要合并多个慢源,但保持秩序. 如果代码执行两次,则顺序必须相同.
为此,非常简单的解决方案如下:
Source
.from(partions())
.flatMapConcat(partition -> slowSource(partition))
这是可行的,但是第二个分区的慢速源代码在第一个分区之后执行.我想并行运行速度较慢的源代码,但将结果与稳定的顺序合并.
我试着这样做:
Source
.completionStage(Source
.from(partions())
.map(partition -> slowSource(partition).runWith(Sink.seq(), actorSystem))
.runWith(Sink.seq(), actorSystem))
.mapConcat(i -> i)
.mapAsync(partitions, stage -> stage)
.mapConcat(i -> i)
它正在工作,但我需要 for each 分区创建一个列表. 有没有更好的方法来实现这一点?