2017-08-28 1 views
1

2つのBehaviorSubjectをマージしてBehaviorSubjectのように振る舞う方法は?RxJava:merge BehaviorSubjects

私はこのようなものがあります:

class Solution { 
    public static void main(String[] args) { 
     Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3)); 
     Subject<List<Integer>> right = BehaviorSubject.createDefault(Arrays.asList(4, 5, 6)); 
     Single<List<Integer>> merged = left.mergeWith(right).reduce(new ArrayList<Integer>(), (l, r) -> { 
      List<Integer> merged1 = new ArrayList<>(l.size() + r.size()); 
      merged1.addAll(l); 
      merged1.addAll(r); 
      return merged1; 
     }); 
     merged.subscribe(System.out::println); 
    } 
} 

を私は気にいら[1, 2, 3, 4, 5, 6]を得ることを期待、しかしsubscribeは何も出力しません。

+0

まず)は、なぜあなたはこれをしたいですか?第2に、 'reduce'は有限のシーケンスを必要としますが、最終的な結果は得られません。 – akarnokd

答えて

3

これは動作するはずです。

Subject<List<Integer>> left = BehaviorSubject.createDefault(Arrays.asList(1, 2, 3)); 
Subject<List<Integer>> right = BehaviorSubject.createDefault(Arrays.asList(4, 5, 6)); 
Observable<List<Integer>> merged = Observable.zip(left, right, (value1, value2) -> { 
    List<Integer> list = new ArrayList<>(); 
    list.addAll(value1); 
    list.addAll(value2); 
    return list; 
}); 
merged.subscribe(System.out::println);