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

相关推荐
dyxal几秒前
Python包导入终极指南:子文件如何成功调用父目录模块
开发语言·python
我居然是兔子9 分钟前
Java虚拟机(JVM)内存模型与垃圾回收全解析
java·开发语言·jvm
小许好楠23 分钟前
java开发工程师-学习方式
java·开发语言·学习
superman超哥40 分钟前
仓颉锁竞争优化深度解析
c语言·开发语言·c++·python·仓颉
Halo_tjn41 分钟前
基于 IO 流实现文件操作的专项实验
java·开发语言
一晌小贪欢42 分钟前
【Python办公自动化】Python办公自动化常用库新手指南
开发语言·python·python自动化办公·python3·python办公自动化·python办公
业精于勤的牙1 小时前
最长特殊序列(二)
java·开发语言·算法
yong99901 小时前
C#实现OPC客户端与S7-1200 PLC的通信
开发语言·网络·算法·c#
charlie1145141911 小时前
快速在WSL上开发一般的C++上位机程序
开发语言·c++·笔记·学习·环境配置·工程
仲夏月二十八1 小时前
关于golang中何时使用值对象和指针对象的描述
开发语言·后端·golang