2016-05-23 10 views
1

rx Javaを使用して異なる種類の観測対象を一度に圧縮する方法はありますか?異なる種類のZip複数観測可

Observable<Action> actionStream = getAction(); 
Observable<UserInfo> ownerStream = getOwner(); 
Observable<List<UserInfo>> relatedUsersStream = getUsers(); 
Observable<Double> score = getScore(); 

//Question: how to merge all relusts at once nad call `getResult`? 
getResult(action, owner, relatedUsers, score); 

UPDATE:たソリューション。しかし、厄介なのはgetResultResultの代わりにObservable<Result>を返し、コンパイルしたくないということです。

Observable.<Action, UserInfo, List<UserInfo>, Double, Result>zip(
    (action, owner, relatedUsers, score) -> getResult(action, owner, relatedUsers, score) 
); 
+1

はおそらく、タプル型にジッパーあなたは、このようなものを作ることができますか? – akarnokd

+0

@akarnokd確かに、appacheには 'Pair'と' Triple'の実装しかありません。私はカスタム4th-Tuple、かなり醜いコードで終了します –

+1

これは、反応的な使用のためにあなた自身の複合オブジェクトを書くのはかなり普通です。 tuple4 +でlibが見つからない場合は、独自のクラスを作成してください。 – akarnokd

答えて

3

および/そして/時に機能をプロジェクトhttp://mvnrepository.com/artifact/io.reactivex/rxjava-joins/0.22.0を-参加しrxjavaがあります。ここ

@Test 
    public void rxJoins() throws Exception { 

    Observable<Integer> ints = Observable.just(1, 2, 3); 
    Observable<String> strs = Observable.just("a", "b", "c"); 
    Observable<Boolean> bools = Observable.just(false, false, true); 

    Plan0<Data> threeItems = JoinObservable.from(ints).and(strs).and(bools).then(Data::new); 
    JoinObservable.when(threeItems).toObservable().toBlocking().subscribe(System.out::println); 
} 

private static class Data { 
    private final int val1; 
    private final String val2; 
    private final boolean val3; 

    public Data(int val1, String val2, boolean val3) { 
     this.val1 = val1; 
     this.val2 = val2; 
     this.val3 = val3; 
    } 

    @Override 
    public String toString() { 
     return "Data{" + 
       "val1=" + val1 + 
       ", val2='" + val2 + '\'' + 
       ", val3=" + val3 + 
       '}'; 
    } 
} 

詳細情報:http://www.introtorx.com/content/v1.0.10621.0/12_CombiningSequences.html

+0

は数時間でouyrの解決をチェックします。 –

+0

Observable.zipは外部のライブラリを必要とせず、同じことをするので、より良いソリューションだと思います –

関連する問題