Вот фрагмент кода
@Test
public void test_mono_void_mono_empty() {
Mono.just("DATA")
.flatMap(s -> Mono.just(s.concat("-")
.concat(s))
.doOnNext(System.out::println)
.then())
.switchIfEmpty(Mono.just("EMPTY")
.doOnNext(System.out::println)
.then())
.block();
}
что дает на консоль следующий результат:
DATA-DATA
EMPTY
Это означает, что цепочка в первом flatMap
была признана пустой.
С другой стороны, у Reactor есть следующий класс MonoEmpty, который возвращается Mono.empty()
метод. Кроме того, метод говорит следующее:
/**
* Create a {@link Mono} that completes without emitting any item.
*
* <p>
* <img class="marble" src="doc-files/marbles/empty.svg" alt="">
* <p>
* @param <T> the reified {@link Subscriber} type
*
* @return a completed {@link Mono}
*/
public static <T> Mono<T> empty() {
return MonoEmpty.instance();
}
без генерации какого-либо элемента - но я выдал Void
типизированный объект с помощью then()
метода.
Какое этому объяснение?
s.concat("-").concat(s)
, вероятно, следует записать какs + "-" + s
- person Lino   schedule 05.12.2019+
может быть оптимизирован компилятором, тогда как сconcat()
у вас нет такой гарантии: stackoverflow.com/a/47626/5515060 - person Lino   schedule 05.12.2019