Как использовать метод void в цепочке Java Reactor? - PullRequest
1 голос
/ 10 июля 2019

Рассмотрим этот код:

import reactor.core.publisher.Mono;

public class Main {

    public static void main(String[] args) {
        Mono.just(1)
            .map(Main::return_int) // is ok
//          .map(Main::return_void) // is not ok
            .subscribe();
    }

    private static void return_void(int input) {
        // do stuff with input
    }

    private static int return_int(int input) {
        return input;
    }
}

Очевидно, что запрещено использовать Mono#map с пустым параметром, я получаю error: method map in class Mono<T> cannot be applied to given types; (...)

Теперь, как я могу назвать этот метод return_void()в цепочке?

Должен ли я использовать оператор, отличный от #map?Или нет другого выбора, кроме как обернуть return_void() в метод, который возвращает Mono< Void>?

1 Ответ

0 голосов
/ 10 июля 2019

Существует Mono#doOnNext, который не преобразует поток, но позволяет выполнять побочные эффекты (что возвращает void, как в вашем случае)

Также рассмотрите возможность использования Mono#handle для продолжения или вызова sink.error(...), когда значение не удовлетворяет вашему условию, вместо того, чтобы выбросить из вашей функции void.

...