package com.rxjava2.android.samples.ui.operators; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.User; import com.rxjava2.android.samples.utils.AppConstant; import com.rxjava2.android.samples.utils.Utils; import java.util.List; import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.functions.BiFunction; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ public class ZipExampleActivity extends AppCompatActivity { private static final String TAG = ZipExampleActivity.class.getSimpleName(); Button btn; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example); btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { doSomeWork(); } }); } /* * Here we are getting two user list * One, the list of cricket fans * Another one, the list of football fans * Then we are finding the list of users who loves both */ private void doSomeWork() { Observable.zip(getCricketFansObservable(), getFootballFansObservable(), new BiFunction, List, List>() { @Override public List apply(List cricketFans, List footballFans) { return Utils.filterUserWhoLovesBoth(cricketFans, footballFans); } }) // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) .subscribe(getObserver()); } private Observable> getCricketFansObservable() { return Observable.create(new ObservableOnSubscribe>() { @Override public void subscribe(ObservableEmitter> e) { if (!e.isDisposed()) { e.onNext(Utils.getUserListWhoLovesCricket()); e.onComplete(); } } }).subscribeOn(Schedulers.io()); } private Observable> getFootballFansObservable() { return Observable.create(new ObservableOnSubscribe>() { @Override public void subscribe(ObservableEmitter> e) { if (!e.isDisposed()) { e.onNext(Utils.getUserListWhoLovesFootball()); e.onComplete(); } } }).subscribeOn(Schedulers.io()); } private Observer> getObserver() { return new Observer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override public void onNext(List userList) { textView.append(" onNext"); textView.append(AppConstant.LINE_SEPARATOR); for (User user : userList) { textView.append(" firstname : " + user.firstname); textView.append(AppConstant.LINE_SEPARATOR); } Log.d(TAG, " onNext : " + userList.size()); } @Override public void onError(Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); } @Override public void onComplete() { textView.append(" onComplete"); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onComplete"); } }; } }