2017-05-07 27 views
0

假設的Rx爪哇 - 結合每對兩個觀測emitions

Observable<Integer> o1 = Observable.just(0, 1, 2); 
Observable<Integer> o2 = Observable.just(2, 4, 6); 

我需要建立的數字,這是從o2o1每個數除以每個數字的emition,也受到零避免鴻溝。

I.e.我需要一些運營商,生產

2 (2/1) 
1 (2/2) 
4 (4/1) 
2 (4/2) 
6 (6/1) 
3 (6/1) 

有什麼建議嗎?

夥計們,謝謝你,你是對的!

但挖掘我的真實案例更深我有更多的難題。請看看Rx java - difficult case

+0

http://stackoverflow.com/a/26588822/3903847你可以在地圖分區除零 – yosriz

回答

1

這樣做(沒有在IDE中檢查,但應該工作)?

Observable<Integer> o1 = Observable.just(0, 1, 2); 
Observable<Integer> o2 = Observable.just(2, 4, 6); 

Observable<Integer> o1nonZero = o1.filter(new Predicate<Integer>() { 
    @Override 
    public boolean test(Integer integer) throws Exception { 
     return integer != null && integer != 0; 
    } 
}) 

o1nonZero.flatMap(new Function<Integer, Observable<Integer>>() { 
    @Override 
    public Observable<Integer> apply(Integer integer2) throws Exception { 
     return o1.map(new Function<Integer, Integer>() { 
      @Override 
      public Integer apply(Integer integer1) throws Exception { 
       return integer2/integer1; 
      } 
     }) 
    } 
}) 
0
Observable<Integer> o1 = Observable.just(0, 1, 2); 
Observable<Integer> o2 = Observable.just(2, 4, 6); 
MathUtil.cartesianProduct(Observable.just(o2, o1)) 
    .filter(array -> array[1] != 0) 
    .map(array -> array[0]/array[1]) 
    .forEach(System.out::println); 

但什麼是cartesianProduct

請參閱Cartesian Product的定義和n-ary cartesian product in rxjava的實現。