just
just
,就是一个简单的发射器依次调用 onNext()
方法。
Observable.just("1", "2", "3")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
Logger.d("onNext: " + s);
}
});
doOnNext
它的作用是让订阅者在接收到数据之前干点有意思的事情。
Observable.just(1, 2, 3, 4)
.doOnNext(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Logger.d("doOnNext 保存 " + integer + "成功" + "\n");
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Logger.d("doOnNext :" + integer + "\n");
}
});
Concat
把两个发射器连接成一个发射器
Observable.concat(Observable.just(1, 2, 3), Observable.just(4, 5, 6))
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Logger.d("concat : " + integer);
}
});
distinct
去重操作符,简单的作用就是去重。
Observable.just(1, 1, 1, 2, 2, 3, 4, 5)
.distinct()
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Logger.d("distinct : " + integer);
}
});
Filter
Filter
过滤器,过滤掉不符合我们条件的值。
Observable.just(1, 20, 65, -5, 7, 19)
.filter(new Predicate<Integer>() {
@Override
public boolean test(@NonNull Integer integer) throws Exception {
return integer >= 10;
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Logger.d("filter : " + integer);
}
});
timer
相当于一个定时任务,只开启一次,默认在新的线程运行
Observable.timer(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Logger.e( "timer :" + aLong + " at " + SystemClock.currentThreadTimeMillis());
}
});
interval
也是一个定时任务,timer只运行一次,interval间隔一段时间执行一次,默认在新的线程运行
Observable.interval(3, 2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(@NonNull Long aLong) throws Exception {
Logger.e("interval :" + aLong + " at " + SystemClock.currentThreadTimeMillis());
}
});
除了以上提到的,其实Rxjava还有很多操作符,如:buffer,skip,take,single,debounce,defer,last,merge,reduce,scan,window等等,感兴趣的大家可以自行研究学习。