user1256821
user1256821

Reputation: 1188

RxJava: merge BehaviorSubjects

How to merge two BehaviorSubjects 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

Answers (1)

Rinor
Rinor

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

Related Questions