我想将我的observable分割为vertical-align: middle;
语句
类似的东西:
if/else
甚至可能吗?
答案 0 :(得分:3)
在Observable中不能以这种方式工作,你必须认为observable就像一个流,你最终可以得到一些项目,其他人。 您将在observable中找到的最接近的if / else将使用GroupsBy。
这里有一些实例,我解释了如何工作
答案 1 :(得分:2)
实现此行为的一种方法是订阅您的数据两次并以不同方式对其进行过滤:
Subscription subscriptionA = Observable.from(array)
.filter(a -> condition(a))
.subscribe(...) // <-- do stuff for condition A
Subscription subscriptionB = Observable.from(array)
.filter(a -> complexCondition(a))
.subscribe(...) // <-- do stuff for condition B
答案 2 :(得分:0)
要扩展Ken's answer,另一个选项是使用replay operator将Observable“分叉”到两个分支中。这保证了原始的observable只被调用一次。如果在链中某处有一些昂贵的处理或副作用,这很有用:
ConnectableObservable<A> connectable = Observable.fromArray()
.replay();
connectable
.filter(a -> condition(a))
.// <--- do stuff if condition returns true
connectable.connect(); // do this after the first branch
connectable
.filter(a -> complexCondition(a)) // filter all elements(!)
.// <--- do stuff if complex condition returns true
connectable
.// <- iterate all elements
请记住,所有分支都必须同时处理onNext和onError事件。