/** * Flattens this and another Single into a single Observable, without any transformation. * <p> * <img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Single.merge.png" alt=""> * <p> * You can combine items emitted by multiple Singles so that they appear as a single Observable, by using * the {@code mergeWith} method. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code mergeWith} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param other * a Single to be merged * @return that emits all of the items emitted by the source Singles * @see <a href="http://reactivex.io/documentation/operators/merge.html">ReactiveX operators documentation: Merge</a> */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) public final Observable<T> mergeWith(SingleSource<? extends T> other) { return merge(this, other); }
/** * Flattens this and another Single into a single Observable, without any transformation. * <p> * <img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Single.merge.png" alt=""> * <p> * You can combine items emitted by multiple Singles so that they appear as a single Observable, by using * the {@code mergeWith} method. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code mergeWith} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param other * a Single to be merged * @return that emits all of the items emitted by the source Singles * @see <a href="http://reactivex.io/documentation/operators/merge.html">ReactiveX operators documentation: Merge</a> */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) public final Observable<T> mergeWith(SingleSource<? extends T> other) { return merge(this, other); }
@Test(expected = NullPointerException.class) public void mergeSingleNull() { Single.merge((Single<Single<Integer>>)null); }
@Test(expected = NullPointerException.class) public void mergeIterableNull() { Single.merge((Iterable<Single<Integer>>)null); }
/** * Merges an Iterable sequence of SingleSource instances into a single Observable sequence, * running all SingleSources at once. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code merge} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * @param <T> the common and resulting value type * @param sources the Iterable sequence of SingleSource sources * @return the new Observable instance * @since 2.0 */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) public static <T> Observable<T> merge(Iterable<? extends SingleSource<? extends T>> sources) { return merge(Observable.fromIterable(sources)); }
/** * Merges an Iterable sequence of SingleSource instances into a single Observable sequence, * running all SingleSources at once. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code merge} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * @param <T> the common and resulting value type * @param sources the Iterable sequence of SingleSource sources * @return the new Observable instance * @since 2.0 */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) public static <T> Observable<T> merge(Iterable<? extends SingleSource<? extends T>> sources) { return merge(Observable.fromIterable(sources)); }
@SuppressWarnings("unchecked") @Test(expected = NullPointerException.class) public void mergeIterableOneIsNull() { Single.merge(Arrays.asList(null, just1)).blockingSubscribe(); }
@Test(expected = NullPointerException.class) public void mergeIterableIteratorNull() { Single.merge(new Iterable<Single<Object>>() { @Override public Iterator<Single<Object>> iterator() { return null; } }).blockingSubscribe(); }
/** * Flattens two Singles into a single Observable, without any transformation. * <p> * <img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Single.merge.png" alt=""> * <p> * You can combine items emitted by multiple Singles so that they appear as a single Observable, by * using the {@code merge} method. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code merge} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param <T> the common value type * @param source1 * a Single to be merged * @param source2 * a Single to be merged * @return an Observable that emits all of the items emitted by the source Singles * @see <a href="http://reactivex.io/documentation/operators/merge.html">ReactiveX operators documentation: Merge</a> */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) @SuppressWarnings("unchecked") public static <T> Observable<T> merge( SingleSource<? extends T> source1, SingleSource<? extends T> source2 ) { ObjectHelper.requireNonNull(source1, "source1 is null"); ObjectHelper.requireNonNull(source2, "source2 is null"); return merge(Observable.fromArray(source1, source2)); }
/** * Flattens two Singles into a single Observable, without any transformation. * <p> * <img width="640" height="380" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Single.merge.png" alt=""> * <p> * You can combine items emitted by multiple Singles so that they appear as a single Observable, by * using the {@code merge} method. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code merge} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param <T> the common value type * @param source1 * a Single to be merged * @param source2 * a Single to be merged * @return an Observable that emits all of the items emitted by the source Singles * @see <a href="http://reactivex.io/documentation/operators/merge.html">ReactiveX operators documentation: Merge</a> */ @CheckReturnValue @SchedulerSupport(SchedulerSupport.NONE) @SuppressWarnings("unchecked") public static <T> Observable<T> merge( SingleSource<? extends T> source1, SingleSource<? extends T> source2 ) { ObjectHelper.requireNonNull(source1, "source1 is null"); ObjectHelper.requireNonNull(source2, "source2 is null"); return merge(Observable.fromArray(source1, source2)); }
@Test public void testMerge() { TestObserver<String> ts = new TestObserver<String>(); Single<String> a = Single.just("A"); Single<String> b = Single.just("B"); Single.merge(a, b).subscribe(ts); ts.assertValueSequence(Arrays.asList("A", "B")); }
ObjectHelper.requireNonNull(source2, "source2 is null"); ObjectHelper.requireNonNull(source3, "source3 is null"); return merge(Observable.fromArray(source1, source2, source3));
ObjectHelper.requireNonNull(source2, "source2 is null"); ObjectHelper.requireNonNull(source3, "source3 is null"); return merge(Observable.fromArray(source1, source2, source3));
@Test public void merge2() { Single.merge(Single.just(1), Single.just(2)) .test() .assertResult(1, 2); }
@Test public void mergeSingleSingle() { Single.merge(Single.just(Single.just(1))) .test() .assertResult(1); }
ObjectHelper.requireNonNull(source3, "source3 is null"); ObjectHelper.requireNonNull(source4, "source4 is null"); return merge(Observable.fromArray(source1, source2, source3, source4));
ObjectHelper.requireNonNull(source3, "source3 is null"); ObjectHelper.requireNonNull(source4, "source4 is null"); return merge(Observable.fromArray(source1, source2, source3, source4));
@Test public void merge3() { Single.merge(Single.just(1), Single.just(2), Single.just(3)) .test() .assertResult(1, 2, 3); }
@Test public void mergeErrors() { List<Throwable> errors = TestCommonHelper.trackPluginErrors(); try { Single<Integer> source1 = Single.error(new TestException("First")); Single<Integer> source2 = Single.error(new TestException("Second")); Single.merge(source1, source2) .test() .assertFailureAndMessage(TestException.class, "First"); assertTrue(errors.toString(), errors.isEmpty()); } finally { RxJavaCommonPlugins.reset(); } } }
@Test public void merge4() { Single.merge(Single.just(1), Single.just(2), Single.just(3), Single.just(4)) .test() .assertResult(1, 2, 3, 4); }