CompletableFuture.supplyAsync(...)
.thenCompose(...)
.thenApply(...)
.thenRun(...)
.thenxxx(...)
.whenComplete((v, ex) -> ...);
String doWork1(){}
Integer doWork2(String work1Result){}
String finalWork(String work1Result, Integer work2Result){}
CompletableFuture.supplyAsync(doWork1)
.thenCompose(doWork2)
.thenRun(someWork) //someWork 中并不需要 work1 和 work2 的结果
.thenCompose(finalWork)
但是为了能够将 work1 和 work2 的结果传递到 finalWork,就必须要在 someWork 中强行加上入参,再原样放到返回中
解决:所有方法一律入参 tuple,返回 tuple,方法中只取需要的值,其他值放在 tuple 中往后流转。但是方法显得不够模块,很冗余,而且对后面维护代码的人很不友好
感觉最近对函数式编程、函子这些比较入迷,有大佬能推荐一下 java8 中使用 CompletableFuture 的正确姿势吗,或者关于函数式编程比较好的教程
1
yamasa 2020-09-22 11:58:58 +08:00 1
1.想学 FP,java 是很不适合的语言。要真正理解思想应该考虑学下 Lisp 的一些方言。反正国内这环境你也指望不了这些语言吃饭,就当是修炼内功了。
2.实在要在 java 里面搞,上 reactor 啊,比 cf 那一套残次品真的完成度高太多了,只要业务是真的 async 的,可以做到一把梭哈完。 |
2
hdfg159 2020-09-22 12:50:08 +08:00 via Android
emmm,用 RxJava 去了
|
3
zoharSoul 2020-09-22 13:36:29 +08:00 1
CompletableFuture 就是个残废.
建议一步到位直接 rxjava 或者 kotlin 协程 |
4
nthin0 OP @yamasa 感谢🙏,只是想提升下内功多接触一些函数式的思想,日常 crud 一把梭能用上的地方不多,准备去学习下 rxjava 了。
|
6
Skhizein 2020-09-22 13:55:20 +08:00 via iPhone
听上去好像存在银弹似的
|
7
jelipo 2020-09-22 13:58:23 +08:00 via Android
写业务就算了,心智负担比较高,你能写出来同事也看不懂
上 kotlin 协程 |
8
wysnylc 2020-09-22 14:10:50 +08:00
没有银弹
|
9
rulework 2020-09-22 14:14:47 +08:00
建议学下 scala
|
10
AllanAG 2020-09-22 14:29:06 +08:00
RxJava 在安卓上使用较多,后端的话的有 Spring 的 Reactor,网络相关的 reactor-netty
|
11
ychost 2020-09-22 15:08:43 +08:00
撸的最多的还是 Stream,RxJava 撸多了发现 Java 不适合
|
12
rim99 2020-09-22 15:10:38 +08:00
CompletableFuture/CompletableStage 感觉适合作为最终输出的类型使用,中间过程用 RxJava 之类的 Reactive Stream 类库更合适
|
13
qiyuey 2020-09-22 15:18:59 +08:00
换 Kotlin 协程吧,这个写起来太麻烦了
|
17
BBCCBB 2020-12-24 16:06:18 +08:00
最近我也在找 completablefuture 重试.. 发现 failsafe 这个库可以实现.不自带的确很难受.
|
18
BBCCBB 2020-12-24 16:06:34 +08:00
楼主已经发现了哈哈
|