-1
我试图通过实现东西流入我的脑袋,绕过RxJava我的头。我有以下努力:RxJava做了一件事情,一旦3个不同的事件发生了
有3个按键,分别emmiting不同的事件(姑且称之为A,B和C)
的用户应该执行,一旦接收到所有3个事件的一些动作(无关于它们之间的顺序或延迟)。
要做什么<>
我试图通过实现东西流入我的脑袋,绕过RxJava我的头。我有以下努力:RxJava做了一件事情,一旦3个不同的事件发生了
有3个按键,分别emmiting不同的事件(姑且称之为A,B和C)
的用户应该执行,一旦接收到所有3个事件的一些动作(无关于它们之间的顺序或延迟)。
要做什么<>
public static void main(String[] args) throws IOException {
// Option 1: Merge events into a stream of three events and wait for onCompleted
Observable.merge(
observeButton1(),
observeButton2(),
observeButton3()
).subscribe(
event-> System.out.println("Button sent event " + event),
Throwable::printStackTrace,
()-> System.out.println("Got all three events")
);
// Option 2: Zip events into a stream of one event, and react to that one event
Observable.zip(
observeButton1(),
observeButton2(),
observeButton3(),
(e1, e2, e3) -> String.join(",", e1, e2, e3)
).subscribe(
events -> System.out.println("Buttons sent events " + events),
Throwable::printStackTrace
);
System.in.read();//stop immediate exit
}
private static Observable<String> observeButton1(){
return Observable.just("A").delay(3, TimeUnit.SECONDS);
}
private static Observable<String> observeButton2(){
return Observable.just("B").delay(2, TimeUnit.SECONDS);
}
private static Observable<String> observeButton3(){
return Observable.just("C").delay(4, TimeUnit.SECONDS);
}
您正在寻找zip
函数。
看起来他没有兴趣看到所有三个人都进来的事件。他只是想知道他们有进来,所以他可以在合并后使用onCompleted。 – 2015-03-31 19:00:19
@RobWorsnop“订阅者在收到全部3个事件后应该执行一些操作” - 我认为他是或者问题不清楚。 – tomrozb 2015-03-31 19:01:35