我正在试验 RxJava 运算符并遇到了这个问题,但不知道它为什么会这样。让我看一个例子,希望问题会很清楚。
我有一个使用 Observable.just 创建的水果 Observable
Observable<String> fruits = Observable.just("Apple", "Banana", "Mango", "Strawberry", "Raspberry", "Blood Oranges");
我使用 Observable.create 创建了另一种可观察的语言
Observable<String> pLanguages = Observable.create(emitter -> {
emitter.onNext("Kotlin");
emitter.onNext("Java");
emitter.onNext("Python");
emitter.onNext("Javascript");
emitter.onNext("Go");
emitter.onNext("C");
emitter.onNext("Rust");
});
switchIfEmpty() 操作符将订阅我们传递给它的操作符,如果源操作符没有发出任何 observables。
使用这个过滤器,我应该会看到基于 switchIfEmpty() 定义的结果。
pLanguages.filter(s -> s.startsWith("Z"))
.switchIfEmpty(fruits)
.subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));
但我没有看到任何排放。但是,如果我像这样切换 observables
fruits.filter(s -> s.startsWith("Z"))
.switchIfEmpty(pLanguages)
.subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));
我确实看到 pLanguages 观察者发出事件。我尝试调试但不确定为什么 Observable.create() 没有为 switchIfEmpty() 运算符发出空的 observable 而 Observable.just() 发出。我在这上面花了几个小时,希望这里有人能回答这个问题。
呼如林
哈士奇WWW
随时随地看视频慕课网APP
相关分类