一、阻塞操作符列表
在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