首先需要介绍Observable.from(),它的作用是传入一个数据集合执行多次直到集合全部释放出来,例如:
Observable.from(urls).subscribe(url -> System.out.println(url));
然后,介绍Observable.flatMap(),
// Returns a List of website URLs based on a text search
Observable<List<String>> query(String text);
query("Hello, world!")
.flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> urls) {
return Observable.from(urls);
}
})
.subscribe(url -> System.out.println(url));
这里需要说明的是,传入flatMap的是第一个参数List<String>,而返回的值是Observable<String>,利用Observable.from(urls)的
意思就是将url集合分别分次的返回,相当于会返回多次Observable<String>直到url集合全部返回。flatMap()可以返回任意
Observable。
假如有这样一个方法:
// 返回网站标题,如果404就返回空
Observable<String> getTitle(String URL);
现在不打印url了,而是打印每个接受到的网站标题。
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String url) {
return getTitle(url);
}
})
.subscribe(title -> System.out.println(title));
现在需要把404的情况过滤掉,即不能显示为空:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.subscribe(title -> System.out.println(title));
filter()只会在通过它内部的布尔值检查才会释放接受到的数据,否则不会释放出来。
现在我们最多只显示5个结果:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.take(5)
.subscribe(title -> System.out.println(title));
take()最多释放指定的数量。(如果少于5个标题,它很早就会结束)
现在我们希望将标题保存在磁盘上:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.take(5)
.doOnNext(title -> saveTitle(title))
.subscribe(title -> System.out.println(title));
doOnNext()允许我们在每次释放一项数据的时候增添额外的行为。
https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators这里有很多RxJava提供的操作符。
Observable.from(urls).subscribe(url -> System.out.println(url));
然后,介绍Observable.flatMap(),
// Returns a List of website URLs based on a text search
Observable<List<String>> query(String text);
query("Hello, world!")
.flatMap(new Func1<List<String>, Observable<String>>() {
@Override
public Observable<String> call(List<String> urls) {
return Observable.from(urls);
}
})
.subscribe(url -> System.out.println(url));
这里需要说明的是,传入flatMap的是第一个参数List<String>,而返回的值是Observable<String>,利用Observable.from(urls)的
意思就是将url集合分别分次的返回,相当于会返回多次Observable<String>直到url集合全部返回。flatMap()可以返回任意
Observable。
假如有这样一个方法:
// 返回网站标题,如果404就返回空
Observable<String> getTitle(String URL);
现在不打印url了,而是打印每个接受到的网站标题。
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String url) {
return getTitle(url);
}
})
.subscribe(title -> System.out.println(title));
现在需要把404的情况过滤掉,即不能显示为空:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.subscribe(title -> System.out.println(title));
filter()只会在通过它内部的布尔值检查才会释放接受到的数据,否则不会释放出来。
现在我们最多只显示5个结果:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.take(5)
.subscribe(title -> System.out.println(title));
take()最多释放指定的数量。(如果少于5个标题,它很早就会结束)
现在我们希望将标题保存在磁盘上:
query("Hello, world!")
.flatMap(urls -> Observable.from(urls))
.flatMap(url -> getTitle(url))
.filter(title -> title != null)
.take(5)
.doOnNext(title -> saveTitle(title))
.subscribe(title -> System.out.println(title));
doOnNext()允许我们在每次释放一项数据的时候增添额外的行为。
https://github.com/ReactiveX/RxJava/wiki/Alphabetical-List-of-Observable-Operators这里有很多RxJava提供的操作符。