[Android开发] RxJava2之路十三-阻塞操作例子Demo

一、阻塞操作符列表

在Rxjava1中的BlockingObservable已经在Rxjava2中去掉了,在Rxjava2中已经集成到了Observable中。

官方说明:

https://github.com/ReactiveX/RxJava/wiki/What’s-different-in-2.0

这里写图片描述

BlockingObservable的不同可以看这里:

http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html

这里写图片描述

名称解析
blockingForEach()对Observable发射的每一项数据调用一个方法,会阻塞直到Observable完成
blockingFirst()阻塞直到Observable发射了一个数据,然后返回第一项数据
blockingMostRecent()返回一个总是返回Observable最近发射的数据的iterable
blockingLatest()返回一个iterable,会阻塞直到或者除非Observable发射了一个iterable没有返回的值,然后返回这个值
blockingNext()返回一个iterable,阻塞直到返回另外一个值
blockingLast()阻塞直到Observable终止,然后返回最后一项数据
blockingIterable()将Observable转换返回一个iterable.
blockingSingle()如果Observable终止时只发射了一个值,返回那个值,否则抛出异常
blockingSubscribe()在当前线程订阅,和forEach类似

二、阻塞操作

2.1 forEach

和subscribe的用法一样,他内部调用的方法就是subscribe

    @CheckReturnValue
    @SchedulerSupport(SchedulerSupport.NONE)
    public final Disposable forEach(Consumer<? super T> onNext) {
        return subscribe(onNext);
    }

栗子:

    private void testforEach() {

        Observable.just(1,2,3).forEach(new Consumer<Integer>() {
            @Override
            public void accept(@NonNull Integer integer) throws Exception {

            }
        });

    }

输出:

03-03 16:45:35.504 4090-4090/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 1
03-03 16:45:35.504 4090-4090/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 2
03-03 16:45:35.504 4090-4090/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 3

2.2 blockingFirst

和过滤操作符的first一样,但是blockingFirst会直接返回数据,

private void blockingFirst() {
        //直接返回数据
        Log.e(TAG, "testforEach: "+Observable.just(1,2,3).blockingFirst());
    }

输出内容为:

03-03 16:47:39.845 4489-4489/cn.com.minstone.rxjavalearn E/BolckingActivity@@: testforEach: 1

2.3 blockingIterable

转换为迭代器

    private void blockingIterable() {
        Iterable<Integer> iterable = Observable.just(1,2,3).blockingIterable();

        for (Integer anIterable : iterable) {
            Log.e(TAG, "blockingIterable: " + anIterable);
        }

    }

输出为:

03-03 16:53:20.077 5373-5373/cn.com.minstone.rxjavalearn E/BolckingActivity@@: blockingIterable: 1
03-03 16:53:20.077 5373-5373/cn.com.minstone.rxjavalearn E/BolckingActivity@@: blockingIterable: 2
03-03 16:53:20.077 5373-5373/cn.com.minstone.rxjavalearn E/BolckingActivity@@: blockingIterable: 3

2.4 blockingSingle

如果Observable终止时只发射了一个值,返回那个值,否则抛出异常

    private void blockingSingle() {

        Log.e(TAG, "blockingSingle: " + Observable.just(1).blockingSingle());

    }

输出为:

03-03 17:17:40.952 23807-23807/? E/BolckingActivity@@: blockingSingle: 1

如果下面的这样的代码,就会抛出异常:

    private void blockingSingle() {

        Log.e(TAG, "blockingSingle: " + Observable.just(1, 2, 3).blockingSingle());

    }

上面的代码抛出的异常为:

2.5 blockingSingle默认值

blockingSingle还可以定义默认值,超出的时候设置一个返回默认值,例如:

    private void blockingSingle() {

        Log.e(TAG, "blockingSingle: " + Observable.just(1, 2, 3).blockingSingle(4));

    }

输出内容为:

03-03 17:17:40.952 23807-23807/? E/BolckingActivity@@: blockingSingle: 1

2.6 blockingSubscribe

和forEach,subscribe类似

    private void blockingSubscribe() {

        Observable.just(1, 2, 3).blockingSubscribe(new Consumer<Integer>() {
            @Override
            public void accept(@NonNull Integer integer) throws Exception {
                Log.e(TAG, "accept: " + integer );

            }
        });


    }

输出为:

03-03 17:22:54.418 28789-28789/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 1
03-03 17:22:54.418 28789-28789/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 2
03-03 17:22:54.418 28789-28789/cn.com.minstone.rxjavalearn E/BolckingActivity@@: accept: 3
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeepStudya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值