2015-03-31 78 views
-1

我試圖通過實現東西流入我的腦袋,繞過RxJava我的頭。我有以下努力:RxJava做了一件事情,一旦3個不同的事件發生了

有3個按鍵,分別emmiting不同的事件(姑且稱之爲A,B和C)

的用戶應該執行,一旦接收到所有3個事件的一些動作(無關於它們之間的順序或延遲)。

要做什麼<>

回答

2
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); 
} 
0

您正在尋找zip函數。

+0

看起來他沒有興趣看到所有三個人都進來的事件。他只是想知道他們有進來,所以他可以在合併後使用onCompleted。 – 2015-03-31 19:00:19

+0

@RobWorsnop「訂閱者在收到全部3個事件後應該執行一些操作」 - 我認爲他是或者問題不清楚。 – tomrozb 2015-03-31 19:01:35

相關問題