RxJava Kotlin如何从单个可观察<string>中获取分离的对象

时间:2017-09-27 07:03:17

标签: android kotlin observable flatmap

RxJava Kotlin flatmap不会从分割的字符串中返回分离的对象。相反,它返回List

val source: Observable<String> = Observable.just("521934/2342/FOXTROT")
.flatMap{Observable.fromArray(it.split("/"))}
.subscribe{Log.d(TAG, "$it")}

返回列表:

[521934, 2342, FOXTROT]

但是书( Thomas Nield:Learning RxJava / 2017 / Page 114 )说它必须返回分离的字符串

521934
2342
FOXTROT   

example from book

http://reactivex.io/documentation/operators/flatmap.html表示它返回Single对象。在我的情况下,我有单列表对象。所以,文档说的是真的。但我想得到书中的结果!

如何拆分列表并获取分隔的对象?

2 个答案:

答案 0 :(得分:2)

利用flatMapIterable,您可以从列表中获取项目流:

Observable.just("521934/2342/FOXTROT")
            .flatMap { input -> Observable.fromArray(input.split("/")) }
            .flatMapIterable { items -> items }
            .subscribe { item -> Log.d(TAG, item) }

答案 1 :(得分:0)

只需使用fromIterable

Observable.just("521934/2342/FOXTROT")
                .flatMap { Observable.fromIterable(it.split("/")) }
                .subscribe{
                    Log.d(TAG, "$it")
                }

在数组的情况下,由于fromArray会使用vararg参数列表,因此您将不得不额外使用扩展运算符:

Observable.fromArray(*arrayOf("521934","2342","FOXTROT"))