/** * Mirrors the first Observable (current or provided) that emits an item. * <p> * <img width="640" height="385" src="https://raw.github.com/wiki/Netflix/RxJava/images/rx-operators/amb.png" alt=""> * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code amb} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param t1 * an Observable competing to react first * @return an Observable that emits the same sequence of items as whichever of the source Observables first * emitted an item * @see <a href="https://github.com/Netflix/RxJava/wiki/Conditional-and-Boolean-Operators#amb">RxJava wiki: amb</a> * @see <a href="http://msdn.microsoft.com/en-us/library/hh229733.aspx">MSDN: Observable.Amb</a> * @since 0.20 */ public final Observable<T> ambWith(Observable<? extends T> t1) { return amb(this, t1); }
private void amb() { Observable.amb(Observable.just(1,2,3).delay(2, TimeUnit.SECONDS),Observable.just(4,5,6)) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.d(TAG, "amb:"+integer); } }); }
@Override public void run() { Observable.amb(Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) {
@OnClick(R.id.amb_execute) public void onExecuteClick(final View v) { killThreads(); Observable.amb(getCustomerFromServerOne(), getCustomerFromServerTwo()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(new Action0() { @Override public void call() { v.setEnabled(false); } }) .subscribe(new Subscriber<Customer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.d("AMB", e.getMessage(), e); } @Override public void onNext(Customer customer) { Log.d("AMB", customer.getName()); results.setText(results.getText() + "\n" + customer.getName()); unsubscribe(); v.setEnabled(true); } }); }
@Test public void test() throws Exception { Observable<Object> obs1 = Observable .<Object>just("obs 1 event") .doOnSubscribe(() -> System.out.println("obs1 sub")) .doOnUnsubscribe(() -> System.out.println("obs1 unsub")); Observable<Object> obs2 = Observable .<Object>just("obs 2 event") .doOnSubscribe(() -> System.out.println("obs2 sub")) .doOnUnsubscribe(() -> System.out.println("obs2 unsub")); Observable .amb(obs1, obs2) .subscribe(System.out::println); Thread.sleep(500); } }
@Test public void sample_375() throws Exception { Observable.amb( stream(100, 17, "S"), stream(200, 10, "F") ).subscribe(log::info); }