Kotlin模仿Rxjava进行数据的流式转换实现

需求:

从数据源接收数据,然后通过转换操作转换为用户需要的数据类型进行消费使用。

1、定义数据类,用于存储临时数据

data class TempData<T> (var info: T)

2、定义数据接收处理接口,并保存在数据类中

fun <R> receiver(action:()->R):TempData<R> {

return TempData(action())

}

3、对数据类进行接口扩展,自定义扩展接口map,目的是进行数据转换,并保存在数据类中

fun <T, R> TempData<T>.map(action:T.()->R):TempData<R> {

return TempData(action(info))

}

4、对数据类进一步扩展,自定义扩展接口comsume,对数据进行处理操作

fun <T> TempData<T>.consume(action:T.()->Unit):Unit{

return action(info)

}

简单举例:

fun main() {

receiver{

"Kotline study!"

}.map{

println("current info is ${this}")

"[Current info is${this}]"

}.map{

length

}.consume{

println("current info length is $this")

}

}

执行之后打印结果为:

current info is Kotline study!

current info length is 32

相关推荐
好学且牛逼的马6 小时前
【手写Mybatis | version0.0.3 附带源码 项目文档】
开发语言·php·mybatis
海上彼尚6 小时前
Go之路 - 2.go的常量变量[完整版]
开发语言·后端·golang
kkk_皮蛋6 小时前
深入理解 WebRTC 临界锁实现与 C++ RAII 机制
开发语言·c++·webrtc
i_am_a_div_日积月累_6 小时前
el-table实现自动滚动;列表自动滚动
开发语言·javascript·vue.js
用户985120035836 小时前
KotlinInline关键字
kotlin
weixin_307779136 小时前
Jenkins Jackson 2 API插件详解:JSON处理的基础支柱
运维·开发语言·架构·json·jenkins
JANGHIGH6 小时前
c++ 多线程(一)
开发语言·c++
匠心网络科技6 小时前
前端学习手册-JavaScript条件判断语句全解析(十八)
开发语言·前端·javascript·学习·ecmascript
神仙别闹6 小时前
基于C++生成树思想的迷宫生成算法
开发语言·c++·算法
海上彼尚6 小时前
Go之路 - 1.gomod指令
开发语言·后端·golang