gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:12:28 25 4
gpt4 key购买 nike

我在试验 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() 运算符将订阅我们传递给它的运算符,如果源运算符不发出任何可观察值的话。

使用这个过滤器,我应该看到根据 switchIfEmpty() 的定义发出的水果。

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"));

我确实看到 pLanguages 观察者发出事件。我尝试调试但不确定为什么 Observable.create() 没有为 switchIfEmpty() 运算符发出空的可观察对象,而 Observable.just() 却发出。我在这上面花了几个小时,希望这里有人能回答这个问题。

最佳答案

总结

您需要在 languages 源上发出完成信号

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

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");
emitter.onComplete();
});

Kotlin 示例(附加)

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

阅读更多

关于java - RxJava Observable.create 不为 switchIfEmpty(observable) 发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com