【发布时间】:2019-04-13 08:47:27
【问题描述】:
我有一个返回Mono<Output>的方法:
interface Processor {
Mono<Output> process(Input input);
}
我想为一个集合执行这个processor 方法:
List<Input> inputs = // get inputs
Processor processor = // get processor
List<Mono<Output>> outputs = inputs.stream().map(supplier::supply).collect(toList());
但我想获得包含汇总结果的Mono<List<Output>>,而不是List<Mono<Output>>。
我试过reduce,但最终的结果看起来很笨拙:
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;
})));
我可以用更少的代码实现这一点吗?
【问题讨论】:
-
你可以用 Mono.just 和使用 map(Mono::block()) 来包装你对“collect(toList)”的调用
-
@manf 然后我会得到
Mono<List<Mono<Output>>>。我只需要Mono<List<Output>>。添加了我已经尝试过的方法。 -
@manf 我不想屏蔽。
标签: java project-reactor reactor