Reactive Programming with RxJava-Chapter3:Operators and Transformations(3)

Slicing and Dicing Using skip(),takeWhile(),and Others

take(n)
take(n)
skip(n)
skip(n)
takeLast(n)
takeLast(n)
skipLast(n)
skipLast(n)
first()
first(n)
last()
last(n)
takeFirst(predicate)
The only difference between this one and first(predicate) is that ti will not break with NoSuchElementException in case of missing matching.
takeUntil(predicate)
takeUntil(predicate)
takeWhile(predicate)
takeUntil(predicate)
elementAt(n)
elementAt
…OrDefault()
count()
all(predicate)
all(predicate)
exists(predicate)
exist(predicate)
contains(value)
contains(value)

Ways of Combining Streams:concat(),merge(),and switchOnNext()

Importantly,concat() will subscribe to the second Observable if,and only if,the first one is completed
concat()

Observable<Car> found=Observable
        .concat(fromCache,fromDb)
        .first();

There is no buffering or halting events within merge()
merge()

Attention start

Observable<Observable<String>> qutoes= //...

//A
map(innerObs->
        innerObs.delay(rnd.nextInt(5),SECONDS))
//B
flatMap(innerObs->just(innerObs)
        .delay(rnd.nextInt(5),SECONDS))

In variant A,the Observable appears immediately in the outer stream but begins emitting events with some delay.In variant B,on the other hand,we shift the entire Observable event forward in time so that it appears in the outer Observable much later.
Attention end

When we have a stream of streams,switchOnNext() always forwards downstream events from the last inner stream,even if older streams keep forwarding fresh events.
switchOnNext()

Criteria-Based Splitting of Stream Using groupBy()

One of the techniques often used together with domain-driven design is event soucing.
In this architecture style,data is not stored as a snapshot of current state and mutated in place;that is using SQL UPDATE queries.Instead,a sequence of immutable domain events(facts) about events that already happended are kept in an append-only data store.Using this design,we never overwrite any data,effectively having an audit log for free.Moreover,the only way to see the data in real time is by applying these facts one after another,starting from an empty view.
group()

Writing Customer Operators

If the operator you are creating is designed to act on the individual items emitted by a source Observable, use lift. If your operator is designed to transform the source Observable as a whole (for instance, by applying a particular set of existing RxJava operators to it) use compose.

Reusing Operators Using compose()

Implementing Advanced Operators Using lift()

最后,安利一款自己写的基于MVP的Android开发框架

https://github.com/sxenon/Pure
欢迎大家拍砖,如果觉得好,麻烦多多star

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值