RxJava Observable.create不为switchIfEmpty(Observable)发出事件

RxJava Observable.create不为switchIfEmpty(Observable)发出事件,java,rx-java2,Java,Rx Java2,我在试验RxJava操作符时遇到了这个问题,不知道它为什么会这样。 让我举一个例子,希望问题会很清楚 我有一个可观察的水果,我用Observable.just创建的 Observable<String> fruits = Observable.just("Apple", "Banana", "Mango", "Strawberry", "Raspberry", "Blood Oranges"); 但我没有看到任何排放物。然而,如果我像这样切换观测值 fruits.filter(s

我在试验RxJava操作符时遇到了这个问题,不知道它为什么会这样。 让我举一个例子,希望问题会很清楚

我有一个可观察的水果,我用Observable.just创建的

Observable<String> fruits = Observable.just("Apple", "Banana", "Mango", "Strawberry", "Raspberry", "Blood Oranges");
但我没有看到任何排放物。然而,如果我像这样切换观测值

fruits.filter(s -> s.startsWith("Z"))
                .switchIfEmpty(pLanguages)
                .subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));

我确实看到平面语言发出事件。我已经尝试过调试,但不确定为什么Observable.create()没有为switchIfEmpty()操作符发出空的Observable,而Observable.just()却发出空的Observable。我花了几个小时在这上面,希望这里有人能回答这个问题。

总结

您需要发出完成
语言
源代码的信号

示例(基于提供的源代码)

Observable pLanguages=可观测的。创建(发射器->{
emitter.onNext(“Kotlin”);
onNext(“Java”);
onNext(“Python”);
onNext(“Javascript”);
emitter.onNext(“Go”);
发射器.onNext(“C”);
发射器.onNext(“锈迹”);
emitter.onComplete();
});
Kotlin(addt'l)中的示例

阅读更多关于

pLanguages.filter(s -> s.startsWith("Z"))
                .switchIfEmpty(fruits)
                .subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));
fruits.filter(s -> s.startsWith("Z"))
                .switchIfEmpty(pLanguages)
                .subscribe(System.out::println, System.out::println, () -> System.out.println("Complete"));
fun main(args: Array<String>) {
    val numbers = Observable.just("one", "two", "three")
    val languages = Observable.create<String> { emitter ->
        emitter.onNext("java")
        emitter.onNext("kotlin")
        emitter.onNext("swift")
        emitter.onComplete() // <-- Invoke this
    }

    languages
            .filter { s -> s.toLowerCase().startsWith("z") }
            .switchIfEmpty(numbers)
            .subscribe({
                System.out.println(it)
            }, {
                System.out.println(it)
            })

    numbers
            .filter { s -> s.toLowerCase().startsWith("z") }
            .switchIfEmpty(languages)
            .subscribe({
                System.out.println(it)
            }, {
                System.out.println(it)
            })


}
one
two
three
java
kotlin
swift