RxJavaRxJava入门Rxjava

第二篇 RxJava常用操作符

2016-12-04  本文已影响2579人  Ggx的代码之旅

接着上一篇文章,本文开始介绍一些常用的操作符,如果你想了解更多相关操作符,可以自行去gitbug上的地址查阅文档RxJavaDoc。如果你还没有看过上一篇文章可以先去随便翻翻。第一篇 在Android中使用RxJava

1. Observable.fromArray(T ... item)

还记得上一篇文章中的just么,这里它和just有着相同的功能,都是接受数据源并创建一个被观察者对象。不同的是fromArray可以接受可变长参数对象(其实就是一个数组),它会把数组中的每个元素发射出来。just也是可以输入多个参数,但是是定长的,SDK内置了一些重载的方法,最多可以输入10个参数。自己去看看源码就明白了。

String[] strs={"I","am","a","person"};
Observable.fromArray(strs).subscribe(str->Log.i(str));

2. Observable.fromIterable(Iterable<? extends T> source)

此方法接收一个继承自Iterable接口的参数,简单的说就是java中的集合类。因此你可以传入一个list集合等等

List<String> list=new ArrayList<>();
list.add("I");
list.add("am");
list.add("a");
list.add("person!");
Observable.fromIterable(list)
        .subscribe(str->Log.i(str));

3. Observable.interval(long initialDelay, long period, TimeUnit unit)

此方法返回一个每隔指定的时间间隔就发射一个序号的 Observable 对象,可用来做倒计时心跳包等操作,无限发送,除非调用dispose()可以终止。

//开始不延时,之后每隔一秒发送一次序列号从 0 开始,每次累加 1如0 1 2 3 4 5.....
Observable.interval(0,1, TimeUnit.SECONDS)
          .subscribe(num->Log.i(num+""));

4. Observable.timer(long delay, TimeUnit unit)

创建一个在指定延迟时间后发射一条数据( 固定值:0 )的 Observable 对象,可用来做定时操作。

//3秒后会输出0
Observable.timer(3,TimeUnit.SECONDS)
          .subscribe(num->Log.i(num+""));

5. Observable.range(final int start, final int count)

此方法可以发射一个指定范围的数

//会直接输出2 3 4 5 6  
Observable.range(2,5).subscribe(num->{Log.i(num+"");});

6. map

map 操作符是可以将返回的数据变换成别的数据类新,比如你可以使用 map 操作符将原来要发射的字符串数据变换成数值型在发射出去。

List<String> list=new ArrayList<>();
list.add("I");
list.add("am");
list.add("a");
list.add("person");
//这里使用map将重新生成一个Integer类型的Observabl最终打印出来的是每个字符串的hashCode值
Observable.fromIterable(list)
        .map(str->str.hashCode())
        .subscribe(num->Log.i(num+""));

7. flatMap

不同于map的是flatMap 返回的是一个全新的Observable 对象。这里使用网上的一个例子,将原本List<Integer>的被观察者数据类型转换成了Integer的被观察者数据类型。这里Flowable和Observable本质是一个东西,Flowable是Rx2.0里的东西为了解决一种叫做背压的问题而诞生的,想要知道什么是背压?请移步至backpressure概念理解

List<Integer> list = new ArrayList<>();
list.add(10);
list.add(1);
list.add(5);
Flowable.just(list)
 .flatMap(new Function<List<Integer>, Publisher<Integer>>() {
    @Override
 public Publisher<Integer> apply(List<Integer> integers) throws Exception {
         return Flowable.fromIterable(integers);
 }
 }) .subscribe(new Consumer<Integer>() {
 @Override
 public void accept(Integer integer) throws Exception {
         System.out.println(integer);
 }
 });

8. filter

这个操作符可以作为数据筛选器,帮你过滤不想要的数据。
下面的例子当数据>3才能放过,因此输出4 5

Observable.fromArray(1,2,-3,4,5)
        .filter(integer -> integer>3)
        .subscribe(integer -> Log.i(integer+""));

9. take

此操作符用于指定想要的数据数量,下面的例子最终只输出1和2

Observable.fromArray(1,2,-3,4,5)
        .take(2)
        .subscribe(integer -> Log.i(integer+""));

10. doOnNext

此操作符可以在消费者也就是观察者 接收到数据之前做事。

操作符还有很多很多暂时先说到这,等不及的可以先去看看官方文档。后面在补充

上一篇下一篇

猜你喜欢

热点阅读