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() .

Solutions Collecting From Web of "RxJava2: onComplete не вызывается с flatMapIterable"

Тип 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") } )