Как конвертировать моноПотоковое <T>? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть код, который использует WebClient для создания Mono<List<T>> из результата массива Json.Метод 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 голосов
/ 11 февраля 2019

Исходя из моего опыта работы с реактором, вы не можете преобразовать 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>>
           });
...