首页 > 编程知识 正文

observable怎么读,observable是什么意思中文翻译

时间:2023-05-04 09:54:45 阅读:258864 作者:2302

2019独角兽企业重金招聘Python工程师标准>>>

1.简介RxJava

一般我们进行耗时任务,如网络、数据库查询、复杂计算等等,我们都回开启一个线程,然后通过接口回调,获取我们的结果。 但随着我们业务逻辑的越来越复杂,我们就会陷入一个回调地狱,回调里面还有回调,在日后我们维护代码来说简直是噩梦。

RxJava的出现正式为了解决这个问题而生的,它支持链式调用!

关键字:异步链式调用观察者模式

这篇文章主要来记录Observable基本用法

2.create final List<String> list = Arrays.asList(new String[] {"one","two","three"});Observable observable = Observable.create(new OnSubscribe<List<String>>() { @Override public void call(Subscriber<? super List<String>> subscriber) { subscriber.onNext(list); subscriber.onCompleted(); } }); 123456789101112

可以发现,我们发射的是以整个List<String> 我们可以发射一个一个对象吗?

当然可以:

Observable observable = Observable.create(new OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { for (String str:list) { subscriber.onNext(str); } subscriber.onCompleted(); } }); 1234567891011

这样看起来好像还不是很优雅!有没有办法刚优雅呢? 那我们来看看from这个方法

3.from Observable.from(list).subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } }); 1234567891011121314151617

结果是:

onetwothreeonCompleted 12345

符合我们的预期!

4.just

如果我只想发射list中的第二和第三位可以吗?

当然可以,我们可以借助just方法:

Observable.just(list.get(1), list.get(2)).subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } }); 1234567891011121314151617

结果:

twothreeonCompleted 1234

符合我们的预期!

备注:just方法可以接受1-10个参数

5.repeat

如果我们想将整个list重复发射两次或者三次呢?

Observable.from(list).repeat(2).subscribe(new Observer<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(String string) { System.out.println(string); } }); 123456789101112131415161718

结果:

onetwothreeonetwothreeonCompleted 12345678

符合我们预期

备注:repeat可以不传参,效果是:无限循环

6.range

从X按顺序输出Y位数字?

Observable.range(88,10).subscribe(new Observer<Integer>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(Integer arg0) { System.out.println(arg0+""); } }); 1234567891011121314151617 88899091929394959697onCompleted 123456789101112 7.interval(测试失败)

间隔时间发射:

Observable.interval(3, TimeUnit.SECONDS).subscribe(new Subscriber<Long>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable arg0) { } @Override public void onNext(Long arg0) { System.out.println(arg0+""); } }); 1234567891011121314151617

很奇怪,这个方法并没有起作用。

8.timer(测试失败)

延迟发射:

Observable.timer(1, TimeUnit.SECONDS).subscribe(new Observer<Long>() { @Override public void onCompleted() { // TODO Auto-generated method stub } @Override public void onError(Throwable arg0) { // TODO Auto-generated method stub } @Override public void onNext(Long arg0) { System.out.println(arg0+""); } }); 12345678910111213141516171819

这个方法和interval一样,也是不能测试。

它还有一个三个参数的方法timer(3,3,TimeUnit.SECONDS) 延迟3秒之后,每隔3秒发射一次

转载于:https://my.oschina.net/carbenson/blog/901785

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。