RxJava flatMap с ToList - PullRequest
       8

RxJava flatMap с ToList

0 голосов
/ 20 сентября 2018

Может кто-нибудь объяснить мне, как передать сигнал onComplete через оператор flatMap в RxJava?

Если прокомментировать оператор flatMap, я могу получить список чисел от 1 до 10, это означает, что toList будет получать сигнал onComplete.Но когда я хочу обработать данные дальше в flatMap, они будут использовать сигнал onComplete, и я не смогу получить никакого результата.Что я могу сделать, чтобы передать сигнал onComplete через оператора flatMap?

У меня есть следующая простая программа:

fun main(args: Array<String>) {
    notify()
            .flatMapMaybe { processData(it) }
            .toList()
            .subscribe(
                    { println("onNext: $it") },
                    { println("onError: ${it.message}") }
            )
}

fun notify(): Flowable<Int> {
    return Flowable.create({ emitter ->
        val random = Random()
        for (index in 1..10) {
            emitter.onNext(index)
            Thread.sleep((random.nextInt(500)).toLong())
        }
        emitter.onComplete()

    }, BackpressureStrategy.BUFFER)
}

fun processData(data: Int): Maybe<String> {
    return Maybe.fromCallable { data }
            .flatMap {
                if (it.mod(2) == 0) {
                    Maybe.fromCallable { it.toString() }
                } else {
                    Maybe.never()
                }
            }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Вместо возврата Maybe.never() используйте Maybe.empty().Согласно документации, Maybe.empty() должен немедленно опубликовать onComplete().

...