-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