2015-03-31 70 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

相关问题