RxJava的使用基础教学 二

20 篇文章 0 订阅
首先需要介绍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提供的操作符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值