RxJava操作符学习笔记

by admin on 2019年1月21日

图片 1

操作符

操作符是为着解决对Observable对象的转换的题目,操作符用于在Observable和最终的Subscriber里面修改Observable发出的事件。
RxJava提供了累累很有用的操作符。

Subscribers更应有做的事体是“响应”,响应Observable发出的轩然大波,而不是去修改。

因而修改就提交操作符吧.

区块链项目开发指南
(区块链技术丛书)
图片 2

Map

transform the items emitted by an Observable by applying a function to
each item

用来把一个轩然大波转换为另一个事件。
map()操作符就是用来变换Observable对象的,map操作符再次回到一个Observable对象,那样就足以兑现链式调用,在一个Observable对象上反复接纳map操作符,最后将最精简的数据传递给Subscriber对象。

图片 3

原理

实效

特性:

  1. 它不用再次来到Observable对象回来的类型,你可以应用map操作符重返一个爆发新的数据类型的observable对象。
  2. 能够对一个Observable多次用到map

用一个事例来训练:

//刚创建的Observable是String类型的
Observable.just("Hellp Map Operator")
.map(new Func1<String, Integer>() {
    @Override
    public Integer call(String s) {
        return 2015;//通过第一个map转成Integer
    }
}).map(new Func1<Integer, String>() {
    @Override
    public String call(Integer integer) {
        return String.valueOf(integer);//再通过第二个map转成String
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

Run起来输出日志:

2015

介绍IBM的专家们调研许多要害行业与团队后总括的各行业对区块链的神态和骨子里的行使。看起来有些看头,不过有多个毛病:

From

convert various other objects and data types into Observables

from()接收一个集合营为输入,然后老是输出一个因素给subscriber.

  1. from(Iterable<? extends T> iterable)
  2. from(T[] array)

from

看个例证,将集纳的数码都输出:

List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");
Observable.from(s).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

Log:

Java
Android
Ruby
Ios
Swift

另外from也经受数组类型:

Observable.from(new String[]{"Java","Android"}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

1:这一个其实已经发生的选取为主没见到相关的新闻电视发布,正文中涉及的一个中华的案例:鑫苑置业的房地产金融区块链,是二零一六年7月的事体,现在搜依旧以信息发布为主,找不到骨子里使用效率的音讯,不由得让自己疑心书中的其余案例;

FlatMap

transform the items emitted by an Observable into Observables, then
flatten the emissions from those into a single Observable

Observable.flatMap()接收一个Observable的出口作为输入,同时输出其它一个Observable。

图片 4

先加一个函数

static Observable<List<String>>query(){
        List<String> s = Arrays.asList("Java", "Android", "Ruby", "Ios", "Swift");
        return Observable.just(s);
}

我们打印所有query到的语言:

// 注意这里的参数是 query所返回的Observable的输出,并且返会一个Observable<String>
query().flatMap(new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        //结合from处理
        return Observable.from(strings);
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println("_flatMap:"+s);
    }
});

日志:

_flatMap:Java
_flatMap:Android
_flatMap:Ruby
_flatMap:Ios
_flatMap:Swift

注意:query返回的Observable的输出是List<String>,在flatMap中变成了参数,而处理过后,返回一个Observable<String>.

假设那时候大家须求处理一下所收获的结果,大家加个前缀,在确保不修改subscribe的前提下大家得以这么做:

追加个函数,用来充实个前缀:

static Observable<String>addPre(String lan){
        return Observable.just("addPre_"+lan);
}

代码可以如此写:

query().flatMap(new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        return Observable.from(strings);
    }
}).flatMap(new Func1<String, Observable<String>>() {
    @Override
    public Observable<String> call(String s) {
        //我们在这里调用`addPre`方法,就行处理
        return addPre(s);
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

输出日志

addPre_Java
addPre_Android
addPre_Ruby
addPre_Ios
addPre_Swift

map与flatMap的区分(出自朱凯):

map 是在一个 item 被发射之后,到达 map 处经过转换成为另一个 item
,然后继续往下走;
flapMap 是 item 被发射之后,到达 flatMap 处经过转换成为一个 Observable
,而那些 Observable
并不会向来被发射出去,而是会马上被激活,然后把它发射出的每个 item
都不翼而飞流中,再持续走下去。
为此 flatMap 和 map 有三个不相同:

  1. 由此 Observable 的转移,相当于再度开了一个异步的流;
  2. item 被疏散了,个数暴发了扭转。

其一flatMap如故比较为难精晓,它究竟是什么样行事的.
协调还亟需多去探听一下.

2:书中举了诸多跟IBM有关的运用,没提其余技术集团,因而我担心有些IBM的竞争对手做出来的事在书中被有意无意忽略了。

更加多操作符

  1. filter 过滤,把不符合条件的过滤掉,留下符合条件的
  2. take 指定最多输出的数额
  3. doOnNext
    允许我们在每便输出一个因素以前做一些格外的业务(其实就是在onNext里调用的)

就用一个事例来演示一下吗:

query().flatMap(new Func1<List<String>, Observable<String>>() {
    @Override
    public Observable<String> call(List<String> strings) {
        return Observable.from(strings);
    }
}).flatMap(new Func1<String, Observable<String>>() {
    @Override
    public Observable<String> call(String s) {
        return addPre(s);
    }
}).filter(new Func1<String, Boolean>() {
    @Override
    public Boolean call(String s) {
        //包含a的留下
        return s.contains("a");
    }
}).take(3)//最多只取3个
  .doOnNext(new Action1<String>() {
    @Override
    public void call(String s) {
        //onNext之前 输出一下
        System.out.println("doOnNext:"+s);
    }
}).subscribe(new Action1<String>() {
    @Override
    public void call(String s) {
        System.out.println(s);
    }
});

输出:

doOnNext:addPre_Java
addPre_Java
doOnNext:addPre_Android
addPre_Android
doOnNext:addPre_Ruby
addPre_Ruby

还有许多居多居多操作符要求去学学,那里就罗列这么多少个.

参考

深刻浅出RxJava(二:操作符)
Operators

安利:
我的Github
我的网易
自己的微信公众号:

微信公众号

全体评价3星,有一对参考价值。

以下是书中有的内容的摘要,#号前面是kindle电子书中的页码,【】中是自家根据上下文补充的音讯:

1:而在区块链上,数据可以在可扩充的私有和部门群体之间举行实时共享。每个事件和贸易都有时光戳记,成为一条长链或永久性记录的一有的,且不可能在后头被歪曲。#129

2:在对海内外近3,000位最高层主任开展的调研中,大家发现在享有行业和地域中,平均有33%的合营社已在设想区块链,或已积极参预区块链#136

3:相比较之下,小车、保单、艺术品、公司债券等资本,甚至是大家身份的一有些(比如常规记录和缴税记录),都可以在区块链平台上被保安、共享、交易或插手转让,不被曲解,效用极高且风险大大下降。#498

4:大家的钻研声明,区块链技术有两个属性有助于排除摩擦:分布式而且可不断;安全而且持久;透明而且可审计;基于共识且可交易;经过统筹而且灵活。#519

5:无论是何种经济水平,区块链消除摩擦的成效都很震惊。这几个结果评释,交易用度和公司摩擦有望鲜明收缩,公司的转型情势也是以前根本无法想象的。#563

6:零售商Overstock通过了政党审批,将区块链技术用于公司债券的天下发行、结算和贸易。Overstock发行的个人债券可以达成当日结算,而不是普普通通所需的2—3天。#624

7:在爱沙尼亚,公民可以在内阁的数据库中表明有关自己记录的完整性,并且政党有限支撑记录不会被篡改。#627

8:近年来,IBM全世界融资部利用区块链技术,将处理纠纷所需的日子从当先40天缩水至不到10天,并从中释放了约1亿韩元资产。#636

9:区块链——分布式账本,可以创设永久透明的资本相关交易记录,进而建立一个金城汤池的信任链。每条记下都有时光戳记,并可追踪从前所暴发的轩然大波。区块链可能会在八个世界暴发突破性影响:可视性、优化和须要。#766

10:区块链可以创立商品可视性以及可追溯性,表达商品的漂泊地方。例如,可以对包米举行跟踪,从农场到船舶集装箱、工厂车间,直至成为货架上的面包。多量团队已经开端测试监控作物情况的传感器,并将其记录在区块链上。#785

11:一家英帝国初创集团Provenance,通过将RFID标记与区块链相结合,对海鲜产品进行认证,从海鲜产品于印度尼西亚海岸利用可不断方式一网打尽初阶,一路追踪到其被运载至行业中须求最残暴的采购者——东瀛寿司商人手中。#791

12:同样在英帝国,伊芙rledger辅助各家集团跟踪钻石来源,不再使用很简单伪造且与运输分离的纸质文书,而是拔取区块链上的多少来跟踪每枚钻石的前后。2由强制劳引力生产的“血钻石”不可能进入市场。被盗钻石可以被永远追踪,那足以减低保证公司的高风险。#793

13:分析结果申明,金融市场行业中大致拥有部门都准备于二零一七年或稍后进入区块链市场。他们希望所调研的各种领域都能从区块链技术获得肯定功能。#920

14:【银行业的】开拓者明确了三个世界,他们以为那几个世界应有可以从区块链技术带来的流水线立异中得到最大功效,其分别是:清算和结算、大额支付、股票和债券发行以及参照数据。#924

15:南美洲最大的经济公司之一瑞穗金融公司早已表达,在区块链上几乎可以须臾间成功跨境证券结算。#938

16:通过将数据传输至区块链,IBM【举世融资部】将纠纷解决岁月从40天压缩至10天之内,从而将开销功能提升40%。#1166

17:但是在有权力限制的区块链上,各方可以覆盖自己的地位。例如,OEM可以告诉供应商已经吸纳商品,同时又不会向生态系统中的其余团伙披露供应商的名字。#1174

18:共享的物联网和区块链账本可以保留有关利用状态、维修、保修和转移部件的笔录。在召回事件中,账本能够找到可能会出题目标构件的现实批次,从而防止大范围的召回工作。#1258

19:区块链还足以催生一种全新的措施,用于有限支撑、管理和动用知识产权。由区块链所支持的全新存在性表明平台现在已经投入使用,首要用以为创立性内容(如音乐)注册版权。针对音乐下载的新数字市场预测会在前年下四个月接踵而来。#1281

20:借助区块链,尽管是很少或偶尔使用的知识产权也恐怕赢得长足管理。最后,知识产权会成为集团的入账来源而不是资本中央。#1288

21:营业执照、产权、车辆登记和其余记录都可以变换来区块链上,那样大规模公众就无需律师、公证人的帮衬,也不要到政坛办公单位去操办有关手续,就足以作证交易的合法性。#1690

22:在阿肯色州,政坛近来安插测试在区块链上进展公司登记、股票跟踪和股东通讯(包罗代理投票)的倾向。5其他部分机关也正在探索如何采纳区块链技术促进无国界服务,比如跨国界注册公司或者为跨省/州开展税费征收提供方便。#1692

23:基于区块链技术的投票活动的矛头是有的当局单位首先开头琢磨的圈子之一。二〇一四年,丹麦王国的政坛“自由联盟”测试了内部的投票系统。#1694

24:在区块链上,公民可以轻松验证保存在内阁数据库中关于自己的笔录是不是完好,并决定何人可以访问那些数量。那样的安全感使得开展新的数字服务(例如以电子情势报税)成为可能。#1740

25:当在区块链上率先次经过汇款执行国际支付时,完结交易的进度以秒计,而不是原先所需的几钟头。#1878

26:近来,一大半银行一度得出结论,认为区块链可以大幅压缩过多贸易的日子、开支和高风险。#1906

27:当互相隔离的多少“孤岛”连接到区块链后,可以兑现以下地点的成效:耗时耗力的对账工作大约全盘熄灭,可即时表明的审计跟踪推进发现坏家伙和心腹的欺诈行为。#1917

28:在中国,鑫苑置业——一家房地产开发商和物业管理集团,在二〇一六年4月出产了由中国招行协助的新的房地产金融区块链。该平台包涵机构网络,以及房地产登记、评估和融资等职能。#1988

29:顶尖账本是Linux基金会的一个开源社区类型,吸引了127家公司和技能供应商,意在提供可随时间推移灵活变动的区块链技术。4至上账本方法拥有多少个举足轻重性能:权限限制、安全可相信、模块化。#2098

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图