RxJava的学习之创建操作符(一)

来源:互联网 发布:长期股权投资商誉算法 编辑:程序博客网 时间:2024/06/05 18:31

1、create操作符

    使用Create操作符从头开始创建一个Observable,给这个操作符传递一个接受观察者作为参数的函数,我们需要实现call方法发射一些数据,并恰当的调用观察者的onNext,onError和onCompleted方法。
create方法默认不在任何特定的调度器上执行。
create操作符是所有创建型操作符的“根”,也就是说其他创建型操作符最后都是通过create操作符来创建Observable的

 Observable.create(new Observable.OnSubscribe<Integer>() {      @Override public void call(Subscriber<? super Integer> subscriber) {        for (int i = 0; i < 5; i++) {          subscriber.onNext(i);          try {            Thread.sleep(1000);          } catch (InterruptedException e) {            e.printStackTrace();          }        }      }    }).subscribe(new Action1<Integer>() {      @Override public void call(Integer integer) {        Log.d("TAG",String.valueOf(integer));      }    });

2、from操作符

(1)定义:将其它种类的对象和数据类型转换为Observable(2)特点:将某个对象转换为Observable对象,然后依次的从对象(可能是Array或Iterable对象)中拿取数据,一个一个的发送。(3)数据格式如下5种形式:    from(array)    from(Iterable)    from(Future)    from(Future,Scheduler)    from(Future,timeout, timeUnit)

代码示例:

  public void from(){    String str[]={"one","two","three","four"};    Observable.from(str).subscribe(new Subscriber<String>() {      @Override public void onCompleted() {        Log.d("TAG","发送完成");      }      @Override public void onError(Throwable e) {      }      @Override public void onNext(String s) {        Log.d("TAG",s);      }    });  }

这里写图片描述

3、just操作符

(1)定义:Just将单个数据转换为发射那个数据的Observable,创建一个发射指定值的Observable(2)介绍:Just将单个数据转换为发射那个数据的Observable,创建一个发射指定值的Observable。Just类似于From,但是From会将数组或Iterable的素具取出然后逐个发射,而Just只是简单的原样发射,将数组或Iterable当做单个数据。如果需要空Observable你应该使用Empty操作RxJava将这个操作符实现为just函数,它接受一至十个参数,返回一个按参数列表顺序发射这些数据的Observable。如果看它的源码的话,你会发现其实它是对from的封装,他调用的还是from。源码:  public static <T> Observable<T> just(T t1, T t2) {        return from((T[])new Object[] { t1, t2 });    }

代码示例:

 Observable.just("one","two","three","four").subscribe(new Subscriber<String>() {      @Override public void onCompleted() {        Log.d("TAG","发送完成");      }      @Override public void onError(Throwable e) {      }      @Override public void onNext(String s) {        Log.d("TAG",s);      }    });
 List<String> list = new ArrayList<>();    list.add("one");    list.add("two");    list.add("three");    list.add("four");    Observable.just(list).subscribe(new Subscriber<List<String>>() {      @Override public void onCompleted() {        Log.d("TAG","发送完成");      }      @Override public void onError(Throwable e) {      }      @Override public void onNext(List<String> list) {        Log.d("TAG",list.toString());      }    });

这里写图片描述

4、range操作符

(1)range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。(2)range有两个参数,第一参数是起始的位置,第二个参数是要输出的个数,    两个参数都是整型数据。一般可以结合Iterable对象和数组使用。

代码示例:

final List<String> list = new ArrayList<>();    list.add("one");    list.add("two");    list.add("three");    list.add("four");    Observable.range(0,2).subscribe(new Subscriber<Integer>() {      @Override public void onCompleted() {          Log.d("TAG","发送完成");      }      @Override public void onError(Throwable e) {      }      @Override public void onNext(Integer integer) {          Log.d("TAG",list.get(integer));      }    });

这里写图片描述

当然创建操作符不止这些,我只是列举出一些比较常用的操作符,想要了解更多的操作符,点击这里。可能写的不是很好,若有问题,欢迎在评论下方提意见。

0 0
原创粉丝点击