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

相关推荐
alexhilton21 小时前
面向开发者的系统设计:像建筑师一样思考
android·kotlin·android jetpack
用户091 天前
Gradle Cache Entries 深度探索
android·java·kotlin
叽哥1 天前
Kotlin学习第 9 课:Kotlin 实战应用:从案例到项目
android·java·kotlin
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
叽哥2 天前
Kotlin学习第 8 课:Kotlin 进阶特性:简化代码与提升效率
android·java·kotlin
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说2 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机