spring-boot - Spring Boot (v2.3.1):Webflux Mono Zip 列表 Monos
问题描述
我想弄清楚如何使用.zip的这个签名
public static <R> Mono<R> zip(final Iterable<? extends Mono<?>> monos, Function<? super Object[], ? extends R> combinator) {
return onAssembly(new MonoZip<>(false, combinator, monos));
}
我有多个从 webclient 请求创建的单声道,我想压缩它们。像这样单独提供每个单声道有效:
Mono.zip(m1, m2, m3, (a, b, c) -> { })
但是如果一个单声道列表像
List<Mono> monos = new ArrayList();
Mono.zip(monos, () -> {});
我收到一个错误:List<Mono> is not compatible with Iterable<? extends Mono<?>>
以这种方式尝试使用 .zip 是否合适,如果是,我该如何实现。
解决方案
我可以看到这里有两件事:
- 在下面的签名中,第一个参数必须是类型,
Iterable<? extends Mono<?>> monos
这意味着您的第一个参数 (monos
) 必须是通用类型 Mono<?>,例如 Mono。 - 第二个参数必须是对象数组,即Object[]。所以 (a, b, c) 作为 lambda 表达式参数是无效的。
public static <R> Mono<R> zip(final Iterable<? extends Mono<?>> monos, Function<? super Object[], ? extends R> combinator) {
return onAssembly(new MonoZip<>(false, combinator, monos));
}
正确使用上述方法将如下所示:
List<Mono<YourObject>> monos = new ArrayList<>();
Mono.zip(monos, objectArray ->
Arrays.stream(objectArray)
.map(object -> yourMapperFunction(object))
.collect(Collectors.toList())
);
推荐阅读
- angular - 将内容从组件移动到子组件后破坏引导布局(Angular v.11)
- php - PHP:使用其他包含文件中的变量来更改 HTML 文本
- python - 将字符串联合起来用作可能的字典键
- laravel - 将数据从视图传递到视图并在视图 laravel 中显示?
- android - 正则表达式在不同的系统上有不同的形式吗?
- mysql - 我正在尝试选择所有 actor_id 为素数的演员。数字 2 和 3 也是质数。除了我的查询还有其他方法吗?
- suitescript2.0 - 如何为 map reduce CSV 文件或 JSON 数据编写 SuiteScript 作为输入过程并创建客户记录
- http - 如何在chainlink中发送带有json正文请求的http post?
- bash - ZAP API 扫描失败并出现错误读取超时
- treeview - 如何通过鼠标更改treview数据窗口中的默认蓝色选择点头