当前位置: 首页 > news >正文

Kotlin Map扩展函数使用指南

常见 List 扩展函数及使用实例

将使用一个基础 Map 作为示例:val map = mapOf("a" to 1, "b" to 2, "c" to 3)。所有代码示例都基于这个 Map。

1. mapKeys 函数

  • 函数签名fun <K, V, R> Map<out K, V>.mapKeys(transform: (Map.Entry<K, V>) -> R): Map<R, V>
  • 意思:转换 Map 的键(key),生成一个新 Map。新 Map 的键由 transform 函数定义,值保持不变。
  • 代码实例:将键转换为大写形式。
val newMap = map.mapKeys { it.key.uppercase() }
println(newMap) // 输出: {A=1, B=2, C=3}

2. mapValues 函数

  • 函数签名fun <K, V, R> Map<out K, V>.mapValues(transform: (Map.Entry<K, V>) -> R): Map<K, R>
  • 意思:转换 Map 的值(value),生成一个新 Map。新 Map 的键保持不变,值由 transform 函数定义。
  • 代码实例:将值乘以 2。
val newMap = map.mapValues { it.value * 2 }
println(newMap) // 输出: {a=2, b=4, c=6}

3. filterKeys 函数

  • 函数签名fun <K, V> Map<out K, V>.filterKeys(predicate: (K) -> Boolean): Map<K, V>
  • 意思:过滤 Map 的键,只保留满足 predicate 条件的键值对,生成一个新 Map。
  • 代码实例:只保留键以 “a” 开头的条目。
val newMap = map.filterKeys { it.startsWith("a") }
println(newMap) // 输出: {a=1}

4. filterValues 函数

  • 函数签名fun <K, V> Map<out K, V>.filterValues(predicate: (V) -> Boolean): Map<K, V>
  • 意思:过滤 Map 的值,只保留满足 predicate 条件的键值对,生成一个新 Map。
  • 代码实例:只保留值大于 1 的条目。
val newMap = map.filterValues { it > 1 }
println(newMap) // 输出: {b=2, c=3}

5. filter 函数

  • 函数签名fun <K, V> Map<out K, V>.filter(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V>
  • 意思:基于整个键值对(entry)进行过滤,只保留满足 predicate 条件的条目,生成一个新 Map。比 filterKeysfilterValues 更灵活。
  • 代码实例:只保留键长度大于 1 且值为奇数的条目。
val newMap = map.filter { (key, value) -> key.length > 1 && value % 2 != 0 }
// 注意:示例 Map 的键都是单字符,所以这里可能无输出。实际使用时,可调整 Map。
val customMap = mapOf("apple" to 3, "banana" to 4)
val filteredMap = customMap.filter { (key, value) -> key.length > 5 && value % 2 == 0 }
println(filteredMap) // 输出: {banana=4}(如果键长度大于5且值为偶)

6. getOrDefault 函数

  • 函数签名fun <K, V> Map<out K, V>.getOrDefault(key: K, defaultValue: V): V
  • 意思:安全地获取值。如果键存在,则返回对应的值;如果键不存在,则返回指定的默认值。
  • 代码实例:获取键 “d” 的值,如果不存在则返回 -1。
val value = map.getOrDefault("d", -1)
println(value) // 输出: -1(因为 "d" 不在原始 Map 中)

7. getOrElse 函数

  • 函数签名fun <K, V> Map<out K, V>.getOrElse(key: K, defaultValue: () -> V): V
  • 意思:安全地获取值。如果键存在,则返回对应的值;如果键不存在,则计算并返回由 defaultValue 函数生成的值。比 getOrDefault 更灵活,因为默认值可以动态计算。
  • 代码实例:获取键 “d” 的值,如果不存在则计算默认值(例如,字符串长度)。
val value = map.getOrElse("d") { "default".length } // 默认值计算为 7
println(value) // 输出: 7

8. plus 操作符(扩展函数形式)

  • 函数签名operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V>(也支持多个 Pair 或 Map)
  • 意思:添加一个或多个键值对,生成一个新 Map。原始 Map 不变。使用 + 操作符调用。
  • 代码实例:添加一个新键值对 “d” to 4。
val newMap = map + ("d" to 4)
println(newMap) // 输出: {a=1, b=2, c=3, d=4}

9. minus 操作符(扩展函数形式)

  • 函数签名operator fun <K, V> Map<out K, V>.minus(key: K): Map<K, V>(也支持多个键)
  • 意思:移除一个或多个键值对,生成一个新 Map。原始 Map 不变。使用 - 操作符调用。
  • 代码实例:移除键 “b”。
val newMap = map - "b"
println(newMap) // 输出: {a=1, c=3}

10. forEach 函数

  • 函数签名fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit)
  • 意思:遍历 Map 的每个键值对,执行 action 操作。无返回值,用于副作用(如打印)。
  • 代码实例:打印每个键值对。
map.forEach { (key, value) -> println("Key: $key, Value: $value") }
// 输出:
// Key: a, Value: 1
// Key: b, Value: 2
// Key: c, Value: 3

11. onEach 函数

  • 函数签名fun <K, V> Map<out K, V>.onEach(action: (Map.Entry<K, V>) -> Unit): Map<K, V>
  • 意思:遍历 Map 的每个键值对,执行 action 操作,并返回原始 Map。常用于链式调用中执行中间操作。
  • 代码实例:打印每个条目后,返回原始 Map 进行后续操作。
val processedMap = map.onEach { println("Processing: ${it.key}") }.mapValues { it.value * 10 }
println(processedMap) // 输出: {a=10, b=20, c=30},同时打印处理过程
http://www.dtcms.com/a/544409.html

相关文章:

  • 批量地址解析坐标,支持WPS、EXCEL软件,支持导出SHP、GEOJSON、DXF等文件格式
  • 【Docker】【2.docker 安装 ubuntu 桌面版】
  • 单片机上的动态数码管
  • 怎么创建网站相册甘肃网站建设项目
  • 前端三剑客之一 CSS~
  • 仓颉语言运算符使用方法详解
  • 视频编码原理
  • 房管局网站建设网站备案要求
  • 2025-TMLR-Piecewise Constant Spectral Graph Neural Network
  • MATLAB(Matrix Laboratory,矩阵实验室)
  • 未来之窗昭和仙君(四十二)开发布草管理系统——东方仙盟筑基期
  • 我国哪些网站是做调查问卷的望野于春
  • Techviz在虚拟现实中实时验证人机工程学设计
  • 自定义注解结合策略模式实现数据脱敏
  • 【金仓数据库产品体验官】Apache James适配金仓数据库
  • VR公共安全学习机-VR校园健康饮食科普系统-VR食品安全体验系统
  • 【微服务】SpringBoot 整合Neo4j 图数据库项目实战详解
  • 模板网站系统wordpress首页描述
  • 图书网站策划书网站的维护方案
  • 【Android】Android Framework 的那些核心子系统及其功能详解
  • Android车载多媒体开发MediaSession框架理解
  • 掌握Axios:前端HTTP请求全攻略
  • 产业链、技术与政策:智能网联新能源汽车的“十五五”蓝图
  • 20251029让AIO-3576Q38开发板适配Rockchip的原厂Android14之后配置为禁止锁屏
  • 解析视频融合平台EasyCVR如何以跨平台与兼容性技术重构安防融合中台
  • SQlite:外键约束
  • linux命令-网络工具-3
  • Android 通信机制简析
  • C++ 虚函数的使用开销以及替代方案
  • 椒江网站建设百度手机助手app安卓版官方下载