关于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()); } });
以上就是我对这两个函数的理解,可能和正确含义差距很大,不过我知道就会去改正!