我有一个代码,该代码使用WebClient从Json数组结果创建Mono<List<T>>
。 bodyToMono方法返回一个Mono<List<T>
对象,我订阅了该对象,然后得到了一个parallelStream
final WebClient client = WebClient.create(daemonEndpoint);
client.get()
.uri("/services?label=com.docker.stack.namespace")
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(new ParameterizedTypeReference<List<Map<String, Object>>>() {
})
.subscribe(services -> services.parallelStream()
.map(e -> {
final String id = (String) e.get("ID");
我想知道的是,是否有一种解决方案可以删除该订阅部分。
答案 0 :(得分:0)
根据我在Reactor上的经验,您不能在不阻止调用的情况下将Mono转换为Stream,可以按以下步骤完成:
Stream<T> stream = yourMono<T>.map(it -> it.parallelStream()).block()
另一种方法是以反应方式处理它(请注意,无论如何有人必须订阅您的发布者,它本身不能完成):
yourMono<T>.flatMapMany(Flux::fromIterable)
.flatMap(it -> {
//there goes your <Map<String, Object>>
});