Intereting Posts
Почему я могу вставить код строки до DayForecast (HashMap (it)) в Котлин? Kotlin запускается в случае сбоя Android Studio «Не удалось синхронизировать Gradle: время ожидания подключения: подключитесь к журналу IDE для получения дополнительной информации (Help | Show Log)» Можно ли включить переменную в тело условия while для Kotlin? Kotlin – Инициализация имущества с использованием «ленивым» и «lateinit» Как добавить +/- функциональность к боттингу в андроиде kotlin Kotlin: Блокировка сопрограмм с неблокирующими ввода-выводами Недопустимый аргумент Kotlin Javascript -library-files Почему выражения лямбда ведут себя по-разному для классов Kotlin и Java? Перезагрузка класса Kotlin сопутствующими объектами / функциями Kotlin JS и GWT interop Моккито издевается над созданием Неустранимое исключение, если оно не подключено к Интернету Проверьте, нет ли функции в Котлине Как изменить порядок сравнения в Kotlin Общий расширяемый класс с сопутствующим объектом в Котлине

RxJava2: onComplete не вызывается с flatMapIterable

Вот короткий фрагмент кода:

val subject = BehaviorSubject.createDefault(emptyList<Int>()) subject.onNext(Arrays.asList(1, 2, 3)) subject.flatMapIterable { list: List<Int> -> list } .subscribeBy( onNext = { l("on next", it) }, onComplete = { l("on complete") } ) 

Почему onComplete здесь не звонит? Что я должен сделать для работы с этим кодом? Потому что в исходном коде я не могу использовать .toList() .

    Тип BehaviorSubject который у вас есть в его форме, является бесконечным источником, если на него не вызывается onComplete . Поэтому flatMapIterable не будет завершен, и ваш обработчик onComplete никогда не будет вызван.

    Таким образом, либо вы заполняете BehaviorSubject :

     val subject = BehaviorSubject.createDefault(emptyList<Int>()) subject.onNext(Arrays.asList(1, 2, 3)) subject.flatMapIterable { list: List<Int> -> list } .subscribeBy( onNext = { l("on next", it) }, onComplete = { l("on complete") } ) subject.onComplete() // <----------------------------------------------------- 

    или вы берете не более одного элемента

     val subject = BehaviorSubject.createDefault(emptyList<Int>()) subject.onNext(Arrays.asList(1, 2, 3)) subject.take(1) // <---------------------------------------------------------- .flatMapIterable { list: List<Int> -> list } .subscribeBy( onNext = { l("on next", it) }, onComplete = { l("on complete") } )