第一篇:重新认识RxJava以及基本使用
第二篇:RxJava调度器以及操作符使用
第三篇:反压学习,RxAndroid的使用和总结
RxJava中操作符主要有 创建、变换、组合、功能、过滤、布尔。
创建操作符:用于创建 被观察者和发送事件。上文中我们用到的create()就是一个创建操作符,当然创建操作符不止只一个,还有很多,不如:just() timer() interval() 等等;
//just用于快速创建被观察者并发送数据,just最多只能发送10个数据
Observable.just(1,2,3,4,5,6,7,8,9,10)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});
//快速创建并发行Array数组
Observable.fromArray(strarr)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
//定时发送一次
Observable.timer(1000, TimeUnit.MILLISECONDS)
.subscribe();
//轮循固定时间不间断发送
Observable.interval(1000,10000,TimeUnit.MILLISECONDS)
.subscribe();
//每隔固定时间发送一个事件,事件的数量可以指定
Observable.intervalRange(1000,10,0,1000,TimeUnit.MILLISECONDS)
.subscribe();
//无延迟的从指定开始值 发送指定数量的事件
Observable.range(1,100)
.subscribe();
剩下的大家可以自行测试。
变换操作符:主要用于将发送的时间进行加工处理,处理成我们需要的消息,比如有:map() buffer()等
//通过map将发送的Integer类型转换为String类型
Observable.just(1, 2, 3, 4, 5)
.map(new Function<Integer, String>() {
@Override
public String apply(Integer integer) throws Exception {
return integer + "";
}
}).subscribe();
//将原先的事件拆分,然后将单个事件重新整合然后在无序发出
Observable.just(1,2,3,4,5)
.flatMap(new Function<Integer, ObservableSource<?>>() {
@Override
public ObservableSource<?> apply(Integer integer) throws Exception {
List<String> list = new ArrayList<>();
for (int i = 5; i < 8; i++) {
list.add("原事件:"+integer+"新增事件:"+i);
}
return Observable.fromIterable(list);
}
}).subscribe();
concatMap()和flatMap()基本一致,只是整合后有序的发出
//定义一个缓存区,每次从被观察者中取指定个数的事件发送
Observable.just(1,2,3,4,5)
.buffer(3,1)
.subscribe();
组合操作符:用于用于合并多个被观察者发送事件,比如:concat() count()等
//组合多个被观察者按组合顺序发出(concatArray区别在于发送个数)
Observable.concat(Observable.just(1,2,3),Observable.just(4,5,6))
.subscribe();
//组合多个被观察者按事件时间顺序发出(mergeArray区别在于发送个数)
Observable.merge(Observable.just(1,2,3),Observable.just(4,5,6))
.subscribe();
//将两个被观察者中的事件合并,然后发出,事件数量以少的被贯穿者为准
Observable.zip(Observable.just(1, 2, 3), Observable.just("A", "B", "C", "D"), new BiFunction<Integer, String, String>() {
@Override
public String apply(Integer integer, String s) throws Exception {
return integer + s;
}
}).subscribe();
//将被观察者发送的数据整理到一个数据结构里发送
Observable.just(1,2,3,4)
.collect(new Callable<List<Integer>>() {
@Override
public List<Integer> call() throws Exception {
return new ArrayList<>();
}
}, new BiConsumer<List<Integer>, Integer>() {
@Override
public void accept(List<Integer> integers, Integer integer) throws Exception {
integers.add(integer);
}
}).subscribe();
功能操作符:在被观察者和观察者之间做桥梁,比如 subscribe() subscribeOn()等
Observable.just(1, 2, 3, 4, 5)
.subscribeOn(Schedulers.newThread())//被观察者的线程
.observeOn(Schedulers.io())//观察者的线程
.delay(1000, TimeUnit.MILLISECONDS)//被观察者延迟一段时间发送
.doOnEach(new Consumer<Notification<Integer>>() {//被观察者每次发送数据都会调用(结束异常都会调用)
@Override
public void accept(Notification<Integer> integerNotification) throws Exception {
}
})
.doOnNext(new Consumer<Integer>() {//被观察者发送onNext之前调用
@Override
public void accept(Integer integer) throws Exception {
}
})
.doAfterNext(new Consumer<Integer>() {//被观察者发送onNext之后调用
@Override
public void accept(Integer integer) throws Exception {
}
})
.doOnError(new Consumer<Throwable>() {//被观察者发送错误时候调用
@Override
public void accept(Throwable throwable) throws Exception {
}
})
.doOnComplete(new Action() {//被观察者正茬发送完毕调用
@Override
public void run() throws Exception {
}
})
.doOnTerminate(new Action() {//被观察者无论正常还是异常结束都会调用
@Override
public void run() throws Exception {
}
})
.doFinally(new Action() {//最后执行
@Override
public void run() throws Exception {
}
})
.doOnSubscribe(new Consumer<Disposable>() {//订阅时候调用
@Override
public void accept(Disposable disposable) throws Exception {
}
})
.onErrorReturn(new Function<Throwable, Integer>() {//如果遇到异常,发送一个特定的事件正常终止
@Override
public Integer apply(Throwable throwable) throws Exception {
return null;
}
})
.retry()//如果出现错误重试
.subscribe();
过滤操作符:主要用于过滤筛选被观察者发送的事件,比如 :skip() take()等
//当filter中返回true时候继续发送
Observable.just(1, 2, 3, 4, 5)
.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer > 2;
}
}).subscribe();
//过滤指定类型
Observable.just(1,"",2,"")
.ofType(Integer.class)
.subscribe();
Observable.just(1,2,3,4)
.skip(1)//跳过正序指定个事件
.skipLast(2)//跳过正序最后指定个数事件
.subscribe();
Observable.just(1, 2, 3, 1, 2, 3, 3, 4, 4)
.distinctUntilChanged()//过滤连续重复事件
.distinct()//过滤全部重复事件
.take(2)//观察者只能接收两个事件
.takeLast(2)//观察者只能接收最后两个事件
.throttleFirst(1, TimeUnit.MILLISECONDS)//指定时间间隔后的第一个事件
.throttleLast(1, TimeUnit.MILLISECONDS)//指定试讲间隔前最后一个事件
.throttleWithTimeout(1, TimeUnit.MILLISECONDS)//如果间隔小于指定时间,丢掉前一个数据
.firstElement()//只发送第一个数据
.subscribe();
布尔操作符:判断被观察者发送的事件是否符合要求 ,比如:all() amb()等
Observable.just(1, 2, 3, 4, 5, 6)
.all(new Predicate<Integer>() {//验证所有事件是否都满足条件,然后发送一个结果
@Override
public boolean test(Integer integer) throws Exception {
return integer < 10;
}
}).subscribe();
Observable.just(1, 2, 3, 4, 5.6)
.takeWhile(new Predicate<Number>() {//事件满足条件才会发送
@Override
public boolean test(Number number) throws Exception {
return (number.intValue() > 2);
}
}).subscribe();
Observable.just(1, 2, 3, 4, 5, 6)
.takeUntil(new Predicate<Integer>() {//事件满足条件时候停止发送
@Override
public boolean test(Integer integer) throws Exception {
return integer == 2;
}
}).subscribe();
Observable.just(1,2,3,4,5)
.contains(4)//判断发送的事件中时候有指定事件
.subscribe();
(在没有经过别人同意的情况下盗用一张图,如果该博主介意的话请联系我!)