在条件下可观察到的开关

时间:2018-07-31 08:20:44

标签: kotlin rx-java rx-java2

我有两个可观察的对象,我想使用第一个,除非它没有给我我想要的(在这种情况下为空列表)。如果是这样的话,我想切换到第二个。

fun test() {

    listSource1().switchMap {
        if (it.isEmpty()) listSource2() else listSource1()
    }

}

fun listSource1() = Observable.just(emptyList<String>())

fun listSource2() = Observable.just(listOf("hello"))

有没有比这更好的方法了?将listSource1映射到listSource1似乎很奇怪,这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

FlatMap首先查看该项目是否为空列表:

Observable<List<T>> source = ...

Observable<List<T>> fallbackSource = ...

source.flatMap(list -> {
    if (list.isEmpty()) {
        return fallbackSource;
    }
    return Observable.just(list);
});