怎么把Mono <list <t >>转换成Stream <t>?

时间:2019-02-10 06:53:31

标签: java java-stream spring-webflux

我有一个代码,该代码使用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");

我想知道的是,是否有一种解决方案可以删除该订阅部分。

1 个答案:

答案 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>>
           });