代码之家  ›  专栏  ›  技术社区  ›  fweigl

状态可观察开关

  •  1
  • fweigl  · 技术社区  · 8 年前

    我有两个观察表,我想使用第一个,除非它没有给出我想要的(在本例中是一个空列表)。如果是这样的话,我想换第二个。

    fun test() {
    
        listSource1().switchMap {
            if (it.isEmpty()) listSource2() else listSource1()
        }
    
    }
    
    fun listSource1() = Observable.just(emptyList<String>())
    
    fun listSource2() = Observable.just(listOf("hello"))
    

    有比这更好的方法吗?地图看起来很奇怪 listSource1 列表源1 ,这是正确的方法吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   akarnokd    8 年前

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

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