Конкатенация издателя, если один из них пуст - PullRequest
2 голосов
/ 28 марта 2020

Я пытаюсь объединить два издателя, но я знаю, что this может быть пустым, и я хочу, чтобы результат тоже был пустым.

fun Flux<String>.prefixWith(rhs: Mono<String>) = rhs
    .flux()
    .concatWith(this)

Это просто возвращает rhs, как и ожидалось. Как вернуть пустое Flux, если this пусто?

1 Ответ

1 голос
/ 29 марта 2020

Вы можете использовать метод hasElements() ( do c) из Flux, чтобы выяснить, есть ли у потока элементы, или нет, а затем, используя flatMapMany, вернуть конкатенацию, если элементы присутствуют или сам пустой поток, если нет элементов.

fun Flux<String>.prefixWith(rhs: Mono<String>) = this.hasElements().flatMapMany<String> {
    if (it) {
        rhs.concatWith(this) //when the flux has elements
    } else {
        this //this would be empty flux
    }
}
...