Reactive Programming with RxJava-Chapter4:Applying Reactive Programming to Existing Application(1)
来源:互联网 发布:非农数据哪个网站 编辑:程序博客网 时间:2024/05/17 22:43
From Collections to Observables
BlockingObservable:Exiting the Reactive World
List<Person> people = personDao .listPeople() .toList() .toBlocking() .single()
Embracing laziness
public Observable<Person> listPeople(){ return Observable.defer(() -> Observable.from(query("SELECT * FROM PEOPLE")));}
void bestBookFor(Person person){ recommend(person) .onErrorResumeNext(bestSeller()) .map(Book::getTitle) .subscribe(this::display);}
Composing Observables()
Lazy paging and concatenation
Obsevabel<Person> people=Observable .range(0,Integer.Max_VALUE) .map(this::listPeople) .takeWhile(list->!list.isEmpty()) .concatMap(Observable::from);
Imperative Concurrency
Where to Subscribe
Pay attention to where you see subscribe() in domain code.Often your business logic is just composing Observables all the way down and returning then to some sort of framewoik or scaffolding layer.The actual subscription happens behind the scenes in a web framework or some glue code.It`s not a bad practice to call subscribe() yourself,but try to push it out as far as possible.
Whenever you see double-wrapped type(for example Optional
Observabel<Ticket> ticket= flight .zipWith(passenger,this::rxBookTicket) .flatMap(obs->obs);
You might perceive flatmap() as merely a syntactic trick to avoid a nested Observable< Observable<…> > problem,but it`s much more fundamental than this.
flatMap() as Asynchronous Chaining Operator
List<Ticket> failures = Observable.from(tickets) .flatMap(ticket -> rxSendEmail(ticket) .ingoreElements() //.flatMap(response -> Observable.<Ticket>empty()) .doOnError(e -> log.warn("Failed to send {}",ticket,e)) .onErrorRetrun(err -> ticket) .toList() .toBlocking() .single()
Attention
Remember that Observables are synchronous by default;however,we can easily change that and apply concurrency in places where it was least expected.This is especially valuable in existing legacy applications,which you can optimize without much hassle.
Wrapping up if you are implementing Obsrvables from scratch,making them asynchronous by default is more idiomatic.
最后,安利一款自己写的基于MVP的Android开发框架
https://github.com/sxenon/Pure
欢迎大家拍砖,如果觉得好,麻烦多多star
- Reactive Programming with RxJava-Chapter4:Applying Reactive Programming to Existing Application(1)
- Reactive Programming with RxJava-Chapter4:Applying Reactive Programming to Existing Application(2)
- Reactive Programming with RxJava-Chapter2:Reactive Extensions
- Reactive Programming with RxJava-Chapter1:Reactive Programming with RxJava
- Reactive Programming with RxJava-Chapter5:Reactive from Top to Bottom(1)
- Functional Reactive Programming on Android With RxJava
- Reactive Programming with RxJava-Chapter5:Reactive from Top to Bottom(2)
- Reactive Programming with RxJava-Chapter3:Operators and Transformations(1)
- Reactive Programming with Rxjava-Chapter6:Flow Control and Backpressure(1)
- Reactive Programming with RxJava-Chapter7:Test and Troubleshooting(1)
- RxJava(一:functional reactive programming)
- RxJava实现响应式编程(Reactive Programming with RxJava)
- Functional Reactive Programming<1>
- Reactive Programming
- Reactive Programming with RxJava-Chapter3:Operators and Transformations(2)
- Reactive Programming with RxJava-Chapter3:Operators and Transformations(3)
- Reactive Programming with RxJava-Chapter6:Flow Control and Backpressure(2)
- Reactive Programming with RxJava,介绍一本书和Rx
- Activity/View/Window/Layout 之间的关系分析
- Java 运算符之 & | ~ ^
- Java生成RSA非对称型加密的公钥和私钥
- JDBC基础知识总结
- 名词解释及知识点
- Reactive Programming with RxJava-Chapter4:Applying Reactive Programming to Existing Application(1)
- java命令行构建(三)
- 新手写html时常犯的错误
- 关于IIC与MPU6050
- spring源码学习--AbstractXmlApplicationContext(三)
- java之集合框架简单实例
- 上海技术型创业公司网络配置
- 求职
- Java基础知识-容量单位及进制转换