PublishSubject не отправляет элементы

Почему приведенный ниже код не дает никаких результатов? Что в этом Subject не так? Я ожидал, что в момент подписки получу результат, а именно объявленную мной длину.

val subject = PublishSubject.create<String>()//PublishRelay.accept() does not work as well
subject.onNext("Alpha"
subject.onNext("Beta")
subject.onNext("Gamma")
subject.onComplete()
subject.map{ it.length }
        .subscribe { println(it) }

person Drocchio    schedule 18.12.2019    source источник


Ответы (1)


Опубликовать тему только после подписки. Попробуйте перейти на ReplaySubject, если вы хотите, чтобы все подписки получали все выбросы, или на BehaviourSubject, если вы хотите получать последние выбросы при подписке.

Вы можете узнать больше о различных типах предметов здесь:

http://reactivex.io/documentation/subject.html

val subject = ReplaySubject.create<String>()/
subject.onNext("Alpha"
subject.onNext("Beta")
subject.onNext("Gamma")
subject.onComplete()
subject.map{ it.length }
    .subscribe { println(it) }

Или подпишитесь, а затем позвоните onNext:

val subject = PublishSubject.create<String>()
subject.map{ it.length }
    .subscribe { println(it) }
subject.onNext("Alpha"
subject.onNext("Beta")
subject.onNext("Gamma")
subject.onComplete()
person Cory Roy    schedule 18.12.2019
comment
отличное объяснение - person Drocchio; 18.12.2019
comment
@Drocchio Я рад, что это помогло! - person Cory Roy; 19.12.2019