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
http://reactivex.io/documentation/operators/flatmap.html表示它返回Single对象。在我的情况下,我有单列表对象。所以,文档说的是真的。但我想得到书中的结果!
如何拆分列表并获取分隔的对象?
答案 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"))