我始终自嘲,程序员就像是马桶修理工,但是同样是对于马桶的修理,却有两种不同的方式:第一种,遇到已经坏掉的部件,直接买一个全新的部件,然后换上就行了;第二种,就是能够知道部件到底是坏在哪个地方了,直接对坏了的地方进行处理就行了。
第一种方法,对于修理工的技能要求较低,基本能找到店铺去购买对应的商品,如果连部件都不知道怎么更换,那么说明你当修理工还完全不够格。有些修理工用第一种方式工作了一辈子,和各个部件店铺的老板都充分打好了交道,所以还能通过优惠价拿到回扣,更换部件的效率也更高,通过这样的方式过上了更好的生活。
第二种方法,对于修理工的技能要求更高,对于一个部件出现了问题,这类修理工常常会追本溯源,因为大多数问题往往仅仅是由于一个极其渺小的原因所导致的,修好这个问题其实不难,但是知道这个问题出在哪,这个往往很难。下面这个我童年时听到的故事,希望与大家共勉。
20世纪初,美国福特公司正处于高速发展时期,一个个车间一片片厂房迅速建成并投入使用。客户的订单快把福特公司销售处的办公室塞满了。每一辆刚刚下线的福特汽车都有许多人等着购买。突然,福特公司一台电机出了毛病,几乎整个车间都不能运转了,相关的生产工作也被迫停了下来。公司调来大批检修工人反复检修,又请了许多专家来察看,可怎么也找不到问题出在哪儿,更谈不上维修了。福特公司的领导真是火冒三丈,别说停一天,就是停一分钟,对福特来讲也是巨大的经济损失。这时有人提议去请著名的物理学家、电机专家斯坦门茨帮助,大家一听有理,急忙派专人把斯坦门茨请来。
斯坦门茨仔细检查了电机,然后用粉笔在电机外壳画了一条线,对工作人员说:“打开电机,在记号处把里面的线圈减少16圈。”人们照办了,令人惊异的是,故障竟然排除了!生产立刻恢复了!
福特公司经理问斯坦门茨要多少酬金,斯坦门茨说:“不多,只需要1万美元。”1万美元?就只简简单单画了一条线!当时福特公司最著名的薪酬口号就是“月薪5美元”,这在当时是很高的工资待遇,以至于全美国许许多多经验丰富的技术工人和优秀的工程师为了这5美元月薪从各地纷纷涌来。1条线,1万美元,一个普通职员100多年的收入总和!斯坦门茨看大家迷惑不解,转身开了个清单:画一条线,1美元;知道在哪儿画线,9999美元。福特公司经理看了之后,不仅照价付酬,还重金聘用了斯坦门茨。
好了,感觉自己说了很多的废话呢?那么今天到底是想聊点什么呢?就聊聊RxJava吧。
其实大多数的技术,当你稍微去仔细想想,完全没有那么的遥不可及,很多其实完全我们自己都能实现。因为底层的命令就那些,也就是建房子的砖块就只有那么几种,万变不离其综!
RxJava是函数式编程的集大成者,这点毋庸置疑,而且他给我们呈现出的效果简直美轮美奂,简直就是一件艺术品!我第一次使用的时候,甚至连subscribeOn()和observeOn()这两个简单的方法的用法都搞不清楚,到网上盲目地去看各种所谓地大神写的博客,有些的确写的不错,有些误导我了好久。对于第一种修理工来说,他们对于方法的理解单纯仅仅是写一个测试方法,调用一下,看看结果,然后去猜方法是怎么用的。他们既不会去思考这个到底是怎么实现的,也不会去查阅官方文档,遇到问题了,尝试去百度上去找找看有没有人遇到相同的问题。如果运气好,有人遇到相同的问题,那么他们直接拷贝他们的代码,问题就解决了。但是如果运气差,他们只能自己慢慢试错,所以这类修理工在第一次试错时往往需要比较长的时间,但是试错试多了,他们遇到同样的问题也就知道大概怎么去处理了。
这次遇到一个需求,就是每半个小时,用户的登录状态会失效,用户希望我每过半个小时就将界面切换到登录界面从而达到刷新登录状态的目的。但是这样一来,项目本身就变得相当尴尬和奇怪,因为我过一会就要再去输入一次用户名和密码。
然后我就在思考,是不是有一种相对简单的方式来位置用户的登录状态,也就是能不能在请求失败后,直接调用登录接口,然后再次调用之前请求失败的接口。但是,函数式编程就是为了这种感觉可以高度复用的逻辑,但是通过传统的方式很难复用的情况而诞生的。
看看下述的代码,你会有灵感的!
public static void main(String... args) {
Flowable.just(1)
.doOnNext(integer -> System.out.println("transfer step 1"))
.compose(upstream -> upstream.flatMap(i -> i == 1 ? upstream : Flowable.just(i)))
.subscribe(integer -> System.out.println("transfer step finish")).dispose();
}
我始终自嘲,程序员就像是马桶修理工,但是同样是对于马桶的修理,却有两种不同的方式:第一种,遇到已经坏掉的部件,直接买一个全新的部件,然后换上就行了;第二种,就是能够知道部件到底是坏在哪个地方了,直接对坏了的地方进行处理就行了。
第一种方法,对于修理工的技能要求较低,基本能找到店铺去购买对应的商品,如果连部件都不知道怎么更换,那么说明你当修理工还完全不够格。有些修理工用第一种方式工作了一辈子,和各个部件店铺的老板都充分打好了交道,所以还能通过优惠价拿到回扣,更换部件的效率也更高,通过这样的方式过上了更好的生活。
第二种方法,对于修理工的技能要求更高,对于一个部件出现了问题,这类修理工常常会追本溯源,因为大多数问题往往仅仅是由于一个极其渺小的原因所导致的,修好这个问题其实不难,但是知道这个问题出在哪,这个往往很难。下面这个我童年时听到的故事,希望与大家共勉。
20世纪初,美国福特公司正处于高速发展时期,一个个车间一片片厂房迅速建成并投入使用。客户的订单快把福特公司销售处的办公室塞满了。每一辆刚刚下线的福特汽车都有许多人等着购买。突然,福特公司一台电机出了毛病,几乎整个车间都不能运转了,相关的生产工作也被迫停了下来。公司调来大批检修工人反复检修,又请了许多专家来察看,可怎么也找不到问题出在哪儿,更谈不上维修了。福特公司的领导真是火冒三丈,别说停一天,就是停一分钟,对福特来讲也是巨大的经济损失。这时有人提议去请著名的物理学家、电机专家斯坦门茨帮助,大家一听有理,急忙派专人把斯坦门茨请来。
斯坦门茨仔细检查了电机,然后用粉笔在电机外壳画了一条线,对工作人员说:“打开电机,在记号处把里面的线圈减少16圈。”人们照办了,令人惊异的是,故障竟然排除了!生产立刻恢复了!
福特公司经理问斯坦门茨要多少酬金,斯坦门茨说:“不多,只需要1万美元。”1万美元?就只简简单单画了一条线!当时福特公司最著名的薪酬口号就是“月薪5美元”,这在当时是很高的工资待遇,以至于全美国许许多多经验丰富的技术工人和优秀的工程师为了这5美元月薪从各地纷纷涌来。1条线,1万美元,一个普通职员100多年的收入总和!斯坦门茨看大家迷惑不解,转身开了个清单:画一条线,1美元;知道在哪儿画线,9999美元。福特公司经理看了之后,不仅照价付酬,还重金聘用了斯坦门茨。
好了,感觉自己说了很多的废话呢?那么今天到底是想聊点什么呢?就聊聊RxJava吧。
其实大多数的技术,当你稍微去仔细想想,完全没有那么的遥不可及,很多其实完全我们自己都能实现。因为底层的命令就那些,也就是建房子的砖块就只有那么几种,万变不离其综!
RxJava是函数式编程的集大成者,这点毋庸置疑,而且他给我们呈现出的效果简直美轮美奂,简直就是一件艺术品!我第一次使用的时候,甚至连subscribeOn()和observeOn()这两个简单的方法的用法都搞不清楚,到网上盲目地去看各种所谓地大神写的博客,有些的确写的不错,有些误导我了好久。对于第一种修理工来说,他们对于方法的理解单纯仅仅是写一个测试方法,调用一下,看看结果,然后去猜方法是怎么用的。他们既不会去思考这个到底是怎么实现的,也不会去查阅官方文档,遇到问题了,尝试去百度上去找找看有没有人遇到相同的问题。如果运气好,有人遇到相同的问题,那么他们直接拷贝他们的代码,问题就解决了。但是如果运气差,他们只能自己慢慢试错,所以这类修理工在第一次试错时往往需要比较长的时间,但是试错试多了,他们遇到同样的问题也就知道大概怎么去处理了。
这次遇到一个需求,就是每半个小时,用户的登录状态会失效,用户希望我每过半个小时就将界面切换到登录界面从而达到刷新登录状态的目的。但是这样一来,项目本身就变得相当尴尬和奇怪,因为我过一会就要再去输入一次用户名和密码。
然后我就在思考,是不是有一种相对简单的方式来位置用户的登录状态,也就是能不能在请求失败后,直接调用登录接口,然后再次调用之前请求失败的接口。但是,函数式编程就是为了这种感觉可以高度复用的逻辑,但是通过传统的方式很难复用的情况而诞生的。
看看下述的代码,你会有灵感的!
public static void main(String... args) {
Flowable.just(1)
.doOnNext(integer -> System.out.println("transfer step 1"))
.compose(upstream -> upstream.flatMap(i -> i == 1 ? upstream : Flowable.just(i)))
.subscribe(integer -> System.out.println("transfer step finish")).dispose();
}
执行结果:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2jdMWDR-1603367096808)(C:\Users\xushiyun\AppData\Roaming\Typora\typora-user-images\image-20201022194329895.png)]](https://i-blog.csdnimg.cn/blog_migrate/80ae48808efc0db45bd5dfb56c76cadf.png)

1425

被折叠的 条评论
为什么被折叠?



