天天看点

Android函数响应式编程最新RxJava-操作符入门(1)

Android函数响应式编程最新RxJava-基本用法

我的简书地址

Github地址

Rxjava操作符包括创建操作符、变换操作符、过滤操作符、组合操作符、错误处理操作符、辅助操作符、条件操作符等等.

今天介绍一下创建操作符和变换操作符

1.创建操作符

上一篇文章介绍了创建操作符 just create from , 还有defer,range,interval,repeat,timer等,下面介绍interval和range,repeat。

(1).interval

创建一个按固定时间发射整数序列 的Observable,也就是计时器,下面的代码表示每隔3s打印一次Log:

Observable.interval(, TimeUnit.SECONDS).subscribe(new Observer<Long>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Long aLong) {
                    Log.e(TAG,aLong+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
           
Android函数响应式编程最新RxJava-操作符入门(1)

(2).range

创建发射指定范围的整数序列的Observable,可以代替for循环,第一个参数为起始值,并且不小于0;第二个参数为终止值,左闭右开。代码如下:

Observable.range(,).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Integer integer) {
                Log.e(TAG,integer+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
           
Android函数响应式编程最新RxJava-操作符入门(1)

(3).repeat

创建一个特定次数重复发射特定数据的Observable,代码如下 :

Observable.range(,).repeat().subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer integer) {
        Log.e(TAG,integer+"");

    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函数响应式编程最新RxJava-操作符入门(1)

2.变换操作符

变换操作符作用是对Observable发射的数据按照一定规则做一些变换,把变换完成的数据发射出去。变化操作符有 map,flatmap,concatmap,cast,groupBy,buffer,flatMapIterable等等。下面讲主要讲三个。

(1).map

map操作符,主要指定一个对象,转换成一个新的Observable对象并发射,比如我们总写的BASE_URL,总是在变化,但是后面的网址拼接不变。,这时候可以用map。

final String BASE_URL="https://github.com/javaexception";
    Observable.just("/keyboard_Cash").map(new Function<String, String >() {
    @Override
    public String apply(@NonNull String s) throws Exception {
        return BASE_URL+s;
    }
    }).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
          Log.e(TAG,s+"");
    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函数响应式编程最新RxJava-操作符入门(1)

(2). flatMap与cast

flatMap讲发射的数据转换为Observable集合,而cast操作符是将Observable集合转换为指定的类型。

List<String> list=new ArrayList<>();
        list.add("a1");
        list.add("a2");
        list.add("a3");  //我要选择的
        list.add("a4");
     Observable.fromArray(list).flatMap(new Function<List<String>, ObservableSource<?>>() {
    @Override
    public ObservableSource<?> apply(@NonNull List<String> strings) throws Exception {
        return Observable.just(BASE_URL+strings.get());
    }
    }).cast(String.class).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        Log.e(TAG,s+"");
    }

    @Override
    public void onError(@NonNull Throwable e) {

    }

    @Override
    public void onComplete() {

    }
    });
           
Android函数响应式编程最新RxJava-操作符入门(1)

(3). flatMapIterable

flatMapIterable操作符可以将数据包装成Iterable,zai Iterable中我们就可以对数据进行处理:

Observable.just(,,).flatMapIterable(new Function<Integer, Iterable<?>>() {
            @Override
            public Iterable<?> apply(@NonNull Integer integer) throws Exception {
                List<Integer> list=new ArrayList<Integer>();
                list.add(integer+);
                return list;
            }
        }).subscribe(new Observer<Object>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Object o) {
                           Log.e(TAG,o+"");
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
            });
           
Android函数响应式编程最新RxJava-操作符入门(1)

上面给just数据里全部加上1,结果显示全部加1了。

今天的Rxjava就介绍到这,持续更新中!