Reputation: 1188
How to merge two BehaviorSubject
s so they behave like a single BehaviorSubject
?
I have something like this:
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);
}
}
I expect to get somthing [1, 2, 3, 4, 5, 6]
, but subscribe
prints nothing.
Upvotes: 1
Views: 1618
Reputation: 1999
This should work ;)
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);
Upvotes: 5