栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RxJava测试demo

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RxJava测试demo

RxJava 响应式编程

Rxjava2入门教程五:Flowable背压支持——对Flowable最全面而详细的讲解

public class DemoActivity extends AppCompatActivity {

    private final int count = 60;
    private TextView textView;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo);

        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                testBackpressure24();
            }
        });
    }

    private Subscription mSubscription;

    public void testBackpressure24() {
        Flowable.create(new FlowableOnSubscribe() {
                    @Override
                    public void subscribe(FlowableEmitter emitter) throws Exception {
                        int n = 0;
                        while (true){
                            if (emitter.requested() == 0) continue;
                            emitter.onNext(n);
                            System.out.println("发射---->" + n);
                            n++;
                        }
                    }
                }, BackpressureStrategy.MISSING)
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(new FlowableSubscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        System.out.println("onSubscribe----");
                        s.request(1);
                        mSubscription = s;
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(50L);
                            System.out.println("接收---->" + integer);
                            mSubscription.request(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Throwable t) {
                        System.out.println("onError----");
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        System.out.println("onComplete----");
                    }
                });
    }

    public void testBackpressure23() {
        Flowable.create(new FlowableOnSubscribe() {
                    @Override
                    public void subscribe(FlowableEmitter emitter) throws Exception {
                        String threadName = Thread.currentThread().getName();
                        System.out.println(threadName + "开始发射数据" + System.currentTimeMillis());
                        for (int i = 1; i <= 500; i++) {
                            System.out.println(threadName + "发射---->" + i);
                            emitter.onNext(i);
                            try {
                                Thread.sleep(100);//每隔100毫秒发射一次数据
                            } catch (Exception ex) {
                                emitter.onError(ex);
                            }
                        }

                        System.out.println(threadName + "发射数据结束" + System.currentTimeMillis());
                        emitter.onComplete();
                    }
                }, BackpressureStrategy.MISSING)
                .onBackpressureLatest()
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(300);//每隔300毫秒接收一次数据
                        } catch (InterruptedException ignore) {
                        }
                        System.out.println(Thread.currentThread().getName() + "接收---------->" + integer);
                    }

                    @Override
                    public void onError(Throwable t) {
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        System.out.println(Thread.currentThread().getName() + "接收----> 完成");
                    }
                });
    }

    public void testBackpressure22() {
        Flowable.create(new FlowableOnSubscribe() {
                    @Override
                    public void subscribe(FlowableEmitter emitter) throws Exception {
                        String threadName = Thread.currentThread().getName();
                        System.out.println(threadName + "开始发射数据" + System.currentTimeMillis());

                        for (int i = 1; i <= 500; i++) {
                            System.out.println(threadName + "发射---->" + i);
                            emitter.onNext(i);
                            try {
                                Thread.sleep(100);//每隔100毫秒发射一次数据
                            } catch (Exception ex) {
                                emitter.onError(ex);
                            }
                        }

                        System.out.println(threadName + "发射数据结束" + System.currentTimeMillis());
                        emitter.onComplete();
                    }
                }, BackpressureStrategy.LATEST)
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(300);//每隔300毫秒接收一次数据
                        } catch (InterruptedException ignore) {
                        }
                        System.out.println(Thread.currentThread().getName() + "接收---------->" + integer);
                    }

                    @Override
                    public void onError(Throwable t) {
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        System.out.println(Thread.currentThread().getName() + "接收----> 完成");
                    }
                });
    }

    public void testBackpressure21() {
        Flowable.create(new FlowableOnSubscribe() {
                    @Override
                    public void subscribe(FlowableEmitter e) throws Exception {
                        for (int i = 1; i <= 129; i++) { // 默认缓存大小是128
                            e.onNext(i);
                        }
                        e.onComplete();
                    }
                }, BackpressureStrategy.ERROR)
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        s.request(Long.MAX_VALUE);            //注意此处,暂时先这么设置
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(10000);
                        } catch (InterruptedException ignore) {
                        }
                        System.out.println(integer);
                    }

                    @Override
                    public void onError(Throwable t) {
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        System.out.println("接收----> 完成");
                    }
                });
    }

    public void testOnBackpressure2() {
        Flowable.range(1, 500)
//                .onBackpressureLatest()
                .onBackpressureDrop()
                .subscribeOn(Schedulers.newThread())
                .observeOn(Schedulers.newThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(100);//每隔300毫秒接收一次数据
                        } catch (InterruptedException ignore) {
                        }
                        System.out.println(Thread.currentThread().getName() + "接收---------->" + integer);
                    }

                    @Override
                    public void onError(Throwable t) {
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        System.out.println(Thread.currentThread().getName() + "接收----> 完成");
                    }
                });
    }


    private void testOnBackpressure1() {
        
        Flowable.range(1, 500)
//                .map(new Function() {
//                    @Override
//                    public Integer apply(Integer integer) throws Exception {
//                        Log.e("TAG", "发射:" + integer);
//                        return integer;
//                    }
//                })
                .onBackpressureBuffer(5, new Action() {
                    @Override
                    public void run() throws Exception {
                        Log.e("TAG", "溢出");
                    }
                }, BackpressureOverflowStrategy.DROP_OLDEST)
                .observeOn(Schedulers.computation())
                .subscribe(new FlowableSubscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        Log.e("TAG", "onSubscribe");
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(100);
                            Log.e("TAG", "接收" + integer);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Throwable t) {
                        Log.e("TAG", "onError");
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testPublish() {
        PublishProcessor processor = PublishProcessor.create();
        processor
                .sample(1, TimeUnit.SECONDS)
                .observeOn(Schedulers.computation(), false, 1024)
                .subscribe(new FlowableSubscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        Log.e("TAG", "onSubscribe");
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(500);
                            Log.e("TAG", "onNext" + integer);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Throwable t) {
                        Log.e("TAG", "onError");
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
        for (int i = 0; i < 1_000; i++) {
            processor.onNext(i);
        }
    }

    private void testFlowable() {
        Flowable.range(1, Integer.MAX_VALUE)
                .observeOn(Schedulers.computation())
                .subscribe(new FlowableSubscriber() {
                    @Override
                    public void onSubscribe(Subscription s) {
                        Log.e("TAG", "onSubscribe");
                        s.request(Integer.MAX_VALUE);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        try {
                            Thread.sleep(1000);
                            Log.e("TAG", "onNext" + integer);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Throwable t) {
                        Log.e("TAG", "onError");
                        t.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testTo() {
        Observable.range(1, 10)
                .to(new Function, Single>() {
                    @Override
                    public Single apply(Observable integerObservable) throws Exception {
                        return integerObservable.count();
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onSuccess(Long aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }
                });
    }

    private void testToMap() {
        Observable.just(1, 2, 3, 4, 5, 6)
                .toMap(Integer::toHexString)
//                .toMultimap(Integer::toHexString)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onSuccess(Map aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }
                });
    }

    private void testDefaultEmpty() {
        Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter emitter) throws Exception {
                        emitter.onComplete();
                    }
                }).defaultIfEmpty(6)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Integer aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testAmb() {
        Observable.amb(
                        Arrays.asList(Observable.range(1, 5), Observable.range(6, 5))
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Integer aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testSequenceEqual() {
        Observable.sequenceEqual(
                        Observable.range(1, 5),
                        Observable.range(1, 6)
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onSuccess(Boolean aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }
                });
    }

    private void testAllAny() {
        // all & any
        // contains & isEmpty
        Observable.range(5, 5)
//                .all(new Predicate() {
//                    @Override
//                    public boolean test(Integer integer) throws Exception {
//                        return integer >= 5; // true
//                    }
//                })
//                .any(new Predicate() {
//                    @Override
//                    public boolean test(Integer integer) throws Exception {
//                        return integer > 5; // true
//                    }
//                })
//                .contains(4) // false
                .isEmpty() // false
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onSuccess(Boolean aBoolean) {
                        Log.e("TAG", "onSuccess: " + aBoolean);
                        textView.setText(String.valueOf(aBoolean));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }
                });
    }

    private void testRetry() {
        Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter emitter) throws Exception {
                        emitter.onNext(1);
                        emitter.onError(new Throwable("Error 1"));
//                        emitter.onError(new Throwable("Error 2"));
                        emitter.onNext(2);
                    }
                })
                .retry(2)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("TAG", "onNext: " + integer);
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testCatch() {
        Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter emitter) throws Exception {
                        emitter.onNext(1);
                        emitter.onError(null);
                        emitter.onNext(2);
                    }
                })
//                .onErrorReturn(new Function() {
//                    @Override
//                    public Integer apply(Throwable throwable) throws Exception {
//                        return 666;
//                    }
//                })
                .onErrorResumeNext(Observable.just(11, 22, 33))
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }


    private void testCombineLatest() {
        Observable.combineLatest(
                        Observable.range(1, 6).subscribeOn(Schedulers.io()),
                        Observable.create(new ObservableOnSubscribe() {
                            @Override
                            public void subscribe(ObservableEmitter emitter) throws Exception {
                                emitter.onNext("a");
                                emitter.onNext("b");
                                emitter.onNext("c");
                                emitter.onNext("d");
                            }
                        }).subscribeOn(Schedulers.io()),
                        new BiFunction() {
                            @Override
                            public String apply(Integer integer, String str) throws Exception {
                                return integer + "==" + str;
                            }
                        }
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(String integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }


    private void testZip() {
        Observable.zip(
                        Observable.range(1, 6).subscribeOn(Schedulers.io()),
                        Observable.create(new ObservableOnSubscribe() {
                            @Override
                            public void subscribe(ObservableEmitter emitter) throws Exception {
                                emitter.onNext("a");
                                emitter.onNext("b");
                                emitter.onNext("c");
                                emitter.onNext("d");
                            }
                        }).subscribeOn(Schedulers.io()),
                        new BiFunction() {

                            @Override
                            public String apply(Integer integer, String str) throws Exception {
                                return integer + "==" + str;
                            }
                        }
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(String integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testConcat() {
        Observable.concat(
                        Observable.range(1, 20).subscribeOn(Schedulers.io()),
                        Observable.range(100, 20).subscribeOn(Schedulers.io())
//                        Observable.create((ObservableOnSubscribe) observableEmitter -> {
//                            Thread.sleep(50);
//                            observableEmitter.onError(new Exception("error"));
//                        }).subscribeOn(Schedulers.io())
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testMerge() {
        Observable.merge(
                        Observable.range(1, 20).subscribeOn(Schedulers.io()),
                        Observable.range(100, 20).subscribeOn(Schedulers.io())
//                        Observable.create((ObservableOnSubscribe) observableEmitter -> {
//                            Thread.sleep(50);
//                            observableEmitter.onError(new Exception("error"));
//                        }).subscribeOn(Schedulers.io())
                ).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testDebounce() {
        Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter emitter) throws InterruptedException {
                        emitter.onNext(1);
                        Thread.sleep(200);
                        emitter.onNext(2);
                        // 500 :输出2
                        Thread.sleep(800);
                        // 1000:无输出
                        emitter.onNext(3);
                        Thread.sleep(200);
                        emitter.onNext(4);
                        // 1500:输出4
                        Thread.sleep(800);
                        emitter.onNext(5);
                        // 2000:输出5
                        Thread.sleep(800);
                        emitter.onNext(6);
                        // 2500:输出6
                        Thread.sleep(100);
                        emitter.onComplete();
                    }
                }).debounce(500, TimeUnit.MILLISECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("TAG", "onNext: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testFilter() {
        Observable.range(2, 5)
                .elementAt(0)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new MaybeObserver() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onSuccess(Integer integer) {
                        Log.e("TAG", "onSuccess: " + integer);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(integer));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testScan() {
        Observable.range(2, 5)
                .scan(new BiFunction() {
                    @Override
                    public Integer apply(Integer integer, Integer integer2) throws Exception {
                        Log.e("TAG", "integer=" + integer + "==" + integer2);
                        return integer * integer2;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(Integer s) {
                        Log.e("TAG", "onNext: " + s);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testGroupby() {
        ArrayList list = new ArrayList();
        list.add(new Person());
        list.add(new Person());
        list.add(new Student());
        list.add(new Student());
        list.add(new Person());
        list.add(new Student());
        list.add(new Student());

        Observable.fromIterable(list)
                .groupBy(new Function() {
                    @Override
                    public Integer apply(Object o) throws Exception {
                        if (o.getClass().getName().equals(Person.class.getName())) {
                            return 1;
                        } else {
                            return 2;
                        }
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GroupedObservable integerObjectGroupedObservable) {
                        Integer key = integerObjectGroupedObservable.getKey();
                        switch (key) {
                            case 1:
                                integerObjectGroupedObservable.subscribe(new Consumer() {
                                    @Override
                                    public void accept(Object object) throws Exception {
                                        Log.e("groupBy", "call: 11接收Person对象");
                                    }
                                });
                                break;
                            case 2:
                                integerObjectGroupedObservable.subscribe(new Consumer() {
                                    @Override
                                    public void accept(Object objects) throws Exception {
                                        Log.e("groupBy", "call: 22接收Student对象");
                                    }
                                });

                                break;
                        }
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    private void testWindow() {
        Observable.range(1, 10)
                .window(3)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Observable s) {
                        Log.e("TAG", "onNext: " + s);
                        s.subscribe(new Consumer() {
                            @Override
                            public void accept(Integer integer) throws Exception {
                                Log.e("TAG", s.hashCode() + "==" + integer);
                            }
                        });
                        textView.setText(String.valueOf(s.hashCode()));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testBuffer() {
        Observable.range(1, 7)
                .buffer(3)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(List s) {
                        Log.e("TAG", "onNext: " + s);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        for (Integer i : s) {
                            Log.e("TAG", "======" + i);
                        }
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testFlatMapIterable() {
        Observable.just(1, 2, 3, 4, 5)
                .flatMapIterable(new Function>() {
                    @Override
                    public Iterable apply(Integer integer) throws Exception {
                        ArrayList data = new ArrayList<>();
                        data.add("#" + integer);
                        data.add("$" + integer);
                        data.add("@" + integer);
                        return data;
                    }
                }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.e("TAG", "onNext: " + s);
//                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testFlatMap() {
        Observable.just(1, 2, 3, 4)
                .subscribeOn(Schedulers.newThread())
                .flatMap(new Function>() {
                    @Override
                    public ObservableSource apply(Integer integer) throws Exception {
                        return createObs(integer);
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                    }

                    @Override
                    public void onNext(String s) {
                        Log.e("TAG", "onNext: " + s);
                        Log.e("TAG", "thread: " + Thread.currentThread().getName());
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private Observable createObs(Integer integer) {
        return Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter emitter) throws Exception {
                Log.e("TAG", "create obs = " + integer);
                Log.e("TAG", "thread: " + Thread.currentThread().getName());
                if (integer % 2 == 0) {
                    emitter.onNext("偶数" + integer);
                } else {
                    emitter.onNext("奇数" + integer);
                }
                emitter.onComplete();
            }
        }).subscribeOn(Schedulers.io());
    }

    private void testCast() {
        Observable.just(1, 2, 3, 4)
                .cast(Object.class)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Object s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testTimer() {
        Observable.timer(6, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Long s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testRepeat() {
        Observable.range(1, 5)
                .repeatWhen(new Function, ObservableSource>() {
                    @Override
                    public ObservableSource apply(Observable objectObservable) throws Exception {
                        return Observable.timer(6, TimeUnit.SECONDS);
                    }
                })
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Integer s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }


    private final Observable obs = Observable.defer(new Callable>() {
        @Override
        public ObservableSource call() throws Exception {
            return Observable.just(System.currentTimeMillis());
        }
    });

    private void testDefer1() {
        obs.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Long s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testCreate() {
        Observable.create(new ObservableOnSubscribe() {
                    @Override
                    public void subscribe(ObservableEmitter emitter) throws Exception {
                        emitter.onNext(111);
                        emitter.onComplete();
                    }
                })
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.e("TAG", "onSubscribe");
                    }

                    @Override
                    public void onNext(Integer s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("TAG", "onError");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.e("TAG", "onComplete");
                    }
                });
    }

    private void testRange() {
        Observable.range(5, 10)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Integer s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(String.valueOf(s));
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    private void testInterval() {
        Observable.interval(0, 1, TimeUnit.SECONDS)
                .take(count)
                .map(new Function() {
                    @Override
                    public String apply(Long aLong) throws Exception {

                        Log.e("TAG", "apply: " + aLong);
                        return String.valueOf(count - aLong);
                    }
                })
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(String s) {
                        Log.e("TAG", "onNext: " + s);
                        textView.setText(s);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    static class Student {
    }

    static class Person {
    }
}


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号