Если вам нужно, чтобы преобразование выполнялось большую часть времени, но при каких-то условиях оно было пустым, используйте handle
(у которого есть возможность отобразить ничего без издержек flatMap
):
Mono<String> emptyIfNotPing = Mono.just("ping")
.handle((t, sink) -> {
if (t.equals("ping")) sink.next("pong");
else sink.complete();
});
Если вы никогда не заботитесь об элементах и просто хотите распространять сигналы терминала (onComplete
и onError
), вы можете использовать ignoreElement
(который поддерживает универсальный тип) или then()
(который превращается в Mono<Void>
):
Mono<String> source = Mono.just("foo");
Mono<Void> emptyWithTypeLoss = source.then();
Mono<String> emptyWithoutTypeLoss = source.ignoreElement();