关于RxJava的from()和 flatMap()方法

最近自己在学RxJava ,想到了一个东西,所以就在这里写下来。

首先是from()方法,他可以接收一个集合,然后将其中的子元素挨个拆出来,例如下面的代码:

  myObservable.just(mList).subscribe(new Action1<List<String>>() {
            @Override
            public void call(List<String> list) {
                Observable.from(list).subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.d("qin>>>","这不是一个标准写法!"+s);
                    }
                });
            }
        });

基本上这个代码的含义等价于

 myObservable.just(mList).subscribe(new Action1<List<String>>() {
            @Override
            public void call(List<String> list) {
                for(String s:list) {
                    Log.d("qin>>>","这一个取出写法!"+s);
                }
            }
        });

而flatMap()的作用是输入一个Observable,再输出一个Observable。好吧,也许不是一个!也许是多个!

看下面代码

 myObservable.just(mList).flatMap(new Func1<List, Observable<?>>() {
            @Override
            public Observable<?> call(List list) {
                return Observable.from(list);
            }
        }).subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                Log.d("qin>>>", o.toString());
            }
        });

这个方法实现的效果和上面两个是一样的,只不过按照官方的说法是更加符合RxJava的规范,而且没有嵌套结构。

利用from(),函数和flastMap()函数组合,就可以实现,输入一个包含数组的Observable对象,输出多个包含单

个元素的Observable。

当然flastMap还有一个用处,就是加工Observable。举个通俗的例子,例如有一个原味的Observable的输入过来,

而我想获得的是孜然味的Observable,此时我们的flastMap就可以派上用处了,我们可以在flastMap的 call函数里

实现给Observable加孜然的步骤!

        myObservable.just("原味的Observable").flatMap(new Func1<String, Observable<?>>() {
            @Override
            public Observable<?> call(String s) {

                return  Observable.just("加孜然了的" + s);
            }
        }).subscribe(new Action1<Object>() {
            @Override
            public void call(Object o) {
                Log.d("qin>>>", o.toString());
            }
        });

 

以上就是我对这两个函数的理解,可能和正确含义差距很大,不过我知道就会去改正!

 

posted @ 2016-04-08 14:40  蓝冷然  阅读(10701)  评论(2编辑  收藏  举报