订阅链中的一个observable并将观察者设置为observable

问题描述 投票:1回答:1
kotlin 1.2.60
rxJava 2

我在下面有以下代码段。我想知道使用链接到flatmap末尾并打印结果或创建观察者并订阅Observable的subscribe有什么不同。

出于某种原因,我期待得到相同的结果。但是当我在onNext中打印出结果时,它会显示完整的发射项目。

然而,对于链接订阅它显示我期望的。

fun main(args: Array<String>) {
    val source2 = Observable.just("521934/2342/FOXTROT", "21962/12112/78886/TANGO", "283242/4542/WHISKEY/2348562")

    source2.flatMap {
        Observable.fromArray(*it.split("/").toTypedArray())
    }
    .subscribe { println(it) }

    val observer = object : Observer<String> {
        override fun onComplete() {
        }

        override fun onSubscribe(d: Disposable) {
        }

        override fun onNext(t: String) {
            println(t)
        }

        override fun onError(e: Throwable) {
        }
    }

    source2.subscribe(observer)
}

输出如下:来自链接订阅:

521934
2342
FOXTROT
21962
12112
78886
TANGO
283242
4542
WHISKEY
2348562

来自onNext:

521934/2342/FOXTROT
21962/12112/78886/TANGO
283242/4542/WHISKEY/2348562
kotlin rx-java2
1个回答
3
投票

source2是一个不可变的集合。你正在观察它两次。您应该在新变量中捕获flatmap的结果,然后观察它。

fun main(args: Array<String>) {
    val source2 = Observable.just("521934/2342/FOXTROT", "21962/12112/78886/TANGO", "283242/4542/WHISKEY/2348562")

    val source3 = source2.flatMap {
        Observable.fromArray(*it.split("/").toTypedArray())
    }
    source3.subscribe { println(it) }

    val observer = object : Observer<String> {
        override fun onComplete() {
        }

        override fun onSubscribe(d: Disposable) {
        }

        override fun onNext(t: String) {
            println(t)
        }

        override fun onError(e: Throwable) {
        }
    }

    source3.subscribe(observer)
}
© www.soinside.com 2019 - 2024. All rights reserved.