RxJava操作符

Posted lxq_xsyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJava操作符相关的知识,希望对你有一定的参考价值。

RxJava操作符

Creating Observables (创建操作符)

create

create是最基础的创建方法

Observable.create(new Observable.OnSubscribe<String>() 
            @Override
            public void call(Subscriber<? super String> subscriber) 
                subscriber.onNext("吉格斯实验室");
            
        ).subscribe(new Subscriber<String>() 
            @Override
            public void onCompleted() 
                System.out.println("onCompleted");
            

        @Override
        public void onError(Throwable e) 
            System.out.println("onError");
        

        @Override
        public void onNext(String s) 
            System.out.println("onNext: " + s);
        
    );

just

just相当于create的简写

Observable.just("吉格斯实验室").subscribe(new Subscriber<String>() 
        @Override
        public void onCompleted() 
            System.out.println("onCompleted");
        

        @Override
        public void onError(Throwable e) 
            System.out.println("onError");
        

        @Override
        public void onNext(String s) 
            System.out.println("onNext: " + s);
        
    );

from

from相当于just的集合形式

Observable.from(new Integer[]1, 2, 3, 4).subscribe(new Subscriber<Integer>() 
        @Override
        public void onCompleted() 
            System.out.println("onCompleted");
        

        @Override
        public void onError(Throwable e) 
            System.out.println("onError");
        

        @Override
        public void onNext(Integer s) 
            System.out.println("onNext: " + s);
        
    );

defer

defer在我们调用create的时候不会创建subscribe对象,只有在我们订阅的时候才会创建。

empty/never/throw

empty创建一个空的observable对象,回调onComplete()方法。
never不回调任何方法。
throw回调onError()方法

interval

interval间隔事件发送(相当于定时器)

range

range创建一个范围内的数据的事件发送

repeat

repeat发送一个特定的数据事件,重复发送

start

start回调onStart()方法

timer

timer进行一个延时后发送数据事件

Transforming Observables (转换操作符)

map

map把一个对象转换成另一个对象(类型转换),比如下面将Integer转为String

Observable.just(123).map(new Func1<Integer, String>() 
            @Override
            public String call(Integer integer) 
                return String.valueOf(integer);
            
        ).subscribe(new Subscriber<String>() 
            @Override
            public void onCompleted() 

        

        @Override
        public void onError(Throwable e) 

        

        @Override
        public void onNext(String s) 

        
    );

flatmap

flatmap是一个一对多或者多对多的转换,转换后的是一个Observable对象,例如下面将integer转换为string

    Observable.just(1, 2, 3, 4, 5).flatMap(new Func1<Integer, Observable<? extends String>>() 

        @Override
        public Observable<? extends String> call(Integer integer) 
            return Observable.just(String.valueOf(integer));
        
    ).subscribe(new Subscriber<String>() 
        @Override
        public void onCompleted() 

        

        @Override
        public void onError(Throwable e) 

        

        @Override
        public void onNext(String s) 

        
    );

groupby

groupby是通过指定规则对数据类别进行分类,例如下面我们对1,2,3,4,5进行了分组

 Observable.just(1, 2, 3, 4, 5).groupBy(new Func1<Integer, Integer>() 
            @Override
            public Integer call(Integer integer) 
                return integer % 2;
            
        ).subscribe(new Subscriber<GroupedObservable<Integer, Integer>>() 
            @Override
            public void onCompleted() 

        

        @Override
        public void onError(Throwable e) 

        

        @Override
        public void onNext(GroupedObservable<Integer, Integer> integerIntegerGroupedObservable) 

        
    );

buffer

buffer可以一次订阅多个,onNext的回调是一个集合

scan

scan将数据累加来发送事件给观察者

 Observable.range(1, 5).scan(new Func2<Integer, Integer, Integer>() 
            @Override
            public Integer call(Integer sum, Integer integer) 
                return sum + integer;
            
        ).subscribe(new Subscriber<Integer>() 
            @Override
            public void onCompleted() 

        

        @Override
        public void onError(Throwable e) 

        

        @Override
        public void onNext(Integer integer) 

        
    );

window

window可以通过时间间隔来分割成列表发送到观察者

Filtering Observables (过滤操作符)

debounce

debuounce的意思是在规定时间间隔外才发送数据(间隔内数据忽略)

distinct

distinct是一个去重操作符,可以去掉列表数据中重复的数据项

elementAt

elementAt取出列表数据指定位置的元素

filter

filter通过指定的规则返回boolean值来确定是否过滤掉某些数据项

first

first取出列表数据项的第一个数据

ignoreElements

ignoreElements不回调onNext,只调用onComplete()和onError()

last

last取出列表数据项的最后一个数据

sample

sample(采样发送)每隔一定时间采样数据列表一起发送给观察者

skip

skip跳过列表数据项的前几项

skiplast

skiplast跳过列表数据项的后几项

take

take取列表数据项的前几项

takelast

takelast取列表数据项的后几项

Combining Observables (组合操作符)

zip

zip是通过定义的组合规则将两列数据进行组合后发送给观察者

merge

merge是将两列数据通过时间合并成一列新数据列发送给观察者

startwith

startwith在数据列表之前插入一个数据发送给观察者

combineLatest

combineLatest将两个列表通过某规则组合成一个数据列表

join

switchOnNext

swichOnNext将拥有很多小的Observable数据对象组合成一个Obserable数据对象

Error Handling Operators (处理错误)

onErrorResumeNext

onErrorResumeNext 当原始Observable在遇到错误时,使用备用Observable

 Observable.just(1,"2",3)
.cast(Integer.class)
.onErrorResumeNext(Observable.just(1,2,3))
.subscribe(integer -> Log.d("JG",integer.toString())) //1,2,3
;

onExceptionResumeNext

当原始Observable在遇到异常时,使用备用的Observable。与onErrorResumeNext类似,区别在于onErrorResumeNext可以处理所有的错误

onErrorReturn

当原始Observable在遇到错误时发射一个特定的数据

retry

retry 当原始Observable在遇到错误时进行重试

 Observable.just(1,"2",3)
    .cast(Integer.class)
    .retry(3)
    .subscribe(integer -> Log.d("JG",integer.toString()),throwable -> Log.d("JG","onError"))
    ;//1,1,1,1,onError

以上是关于RxJava操作符的主要内容,如果未能解决你的问题,请参考以下文章

一文带你全面了解RxJava

理解 RxJava 的线程模型

Android RxJava使用介绍 RxJava的操作符

RxJava之错误处理

Android RxJava使用介绍 RxJava的操作符

RxJava 错误处理