如何转换List< Mono<>>到Mono< List< T>> ;? [英] How to convert List<Mono<T>> to Mono<List<T>>?
本文介绍了如何转换List< Mono<>>到Mono< List< T>> ;?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个返回 Mono< Output>
的方法:
interface Processor {
Mono<Output> process(Input input);
}
我想为集合执行此 processor
方法:
And I want to execute this processor
method for a collection:
List<Input> inputs = // get inputs
Processor processor = // get processor
List<Mono<Output>> outputs = inputs.stream().map(supplier::supply).collect(toList());
但我想获取的 Mono< List< List< Output>>
而不是 List< Mono< Output>>
,
我尝试了 reduce
,但是最终结果看起来很笨拙:
I tried reduce
, but the final result looks very clumsy:
Mono<List<Output>> result = inputs.stream().map(processor::process)
.reduce(Mono.just(new ArrayList<>()),
(monoListOfOutput, monoOfOutput) ->
monoListOfOutput.flatMap(list -> monoOfOutput.map(output -> {
list.add(output);
return list;
})),
(left, right) ->
left.flatMap(leftList -> right.map(rightList -> {
leftList.addAll(rightList);
return leftList;
})));
我可以用更少的代码来实现吗?
Can I achieve this with less code?
推荐答案
如果您不必出于任何原因创建流,则可以从输入中创建Flux,对其进行映射并收集列表
If you don't have to create stream for any reason, you could create Flux from your inputs, map it and collect list
Flux.fromIterable(inputs).flatMap(processor::process).collectList();
这篇关于如何转换List< Mono<>>到Mono< List< T>> ;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文