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

Kotlin List扩展函数使用指南

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

  1. map:转换每个元素

    • 含义:对列表中的每个元素应用一个转换函数,返回新列表。
    • 使用实例
      val numbers = listOf(1, 2, 3)
      val squared = numbers.map { it * it }  // 每个元素平方
      println(squared)  // 输出: [1, 4, 9]
      
  2. filter:过滤元素

    • 含义:返回满足条件的元素组成的新列表。
    • 使用实例
      val numbers = listOf(1, 2, 3, 4)
      val evens = numbers.filter { it % 2 == 0 }  // 过滤出偶数
      println(evens)  // 输出: [2, 4]
      
  3. forEach:遍历元素

    • 含义:对每个元素执行操作,无返回值(用于副作用)。
    • 使用实例
      val names = listOf("Alice", "Bob", "Charlie")
      names.forEach { println("Hello, $it!") }  // 输出每个名字的问候
      // 输出: 
      // Hello, Alice!
      // Hello, Bob!
      // Hello, Charlie!
      
  4. any:检查是否存在元素满足条件

    • 含义:如果至少一个元素满足条件,返回 true;否则 false
    • 使用实例
      val numbers = listOf(1, 3, 5)
      val hasEven = numbers.any { it % 2 == 0 }  // 检查是否有偶数
      println(hasEven)  // 输出: false
      
  5. all:检查所有元素满足条件,none正好相反,检查所有元素不满足条件

    • 含义:如果所有元素都满足条件,返回 true;否则 false
    • 使用实例
      val numbers = listOf(2, 4, 6)
      val allEven = numbers.all { it % 2 == 0 }  // 检查是否全为偶数
      println(allEven)  // 输出: true
      
  6. find:查找第一个满足条件的元素

    • 含义:返回第一个满足条件的元素(可选类型),若无则返回 null
    • 使用实例
      val numbers = listOf(1, 2, 3, 4)
      val firstEven = numbers.find { it % 2 == 0 }  // 查找第一个偶数
      println(firstEven)  // 输出: 2
      
  7. firstlast:获取首尾元素

    • 含义first 返回第一个元素(或满足条件的第一个),last 返回最后一个元素(或满足条件的最后一个)。如果列表为空,会抛出异常;使用 firstOrNulllastOrNull 可避免异常。
    • 使用实例
      val numbers = listOf(1, 2, 3)
      println(numbers.first())  // 输出: 1
      println(numbers.last { it > 1 })  // 输出: 3 (条件: 大于1)
      
  8. reducefold:聚合操作

    • 含义reduce 从第一个元素开始累积(无初始值),fold 从指定初始值开始累积。常用于求和、求积等。
    • 使用实例
      val numbers = listOf(1, 2, 3)
      val sumReduce = numbers.reduce { acc, num -> acc + num }  // 累积和: 1+2+3
      println(sumReduce)  // 输出: 6val sumFold = numbers.fold(10) { acc, num -> acc + num }  // 从10开始累积
      println(sumFold)  // 输出: 16
      
  9. groupBy:分组元素

    • 含义:根据键生成函数分组元素,返回一个 Map(键为分组依据,值为元素列表)。
    • 只要“分组列表” → 用 groupBy。
      想复用 Map → 用 groupByTo。
      只想聚合统计(计数、求和等)→ 用 groupingBy + 后续聚合,更快更省内存。
    • 使用实例
      val words = listOf("apple", "banana", "cherry")
      val byLength = words.groupBy { it.length }  // 按单词长度分组
      println(byLength)  // 输出: {5=["apple", "cherry"], 6=["banana"]}
      
  10. associate:将集合元素转换为键值对

    • 使用实例

      val numbers = listOf("one", "two", "three")
      val map = numbers.associate { it to it.length }// 输出:{one=3, two=3, three=5}
      println(map)
      
    • associateBy 类似于 associate,但仅通过元素生成键,值默认是元素本身。可以指定一个自定义的值转换函数。

    • 使用示例:

      val numbers = listOf("one", "two", "three")
      val map1 = numbers.associateBy { it.length } // 键:长度,值:元素本身
      val map2 = numbers.associateBy({ it.length }, { it.uppercase() }) // 键:长度,值:大写元素// 输出:{3=one, 3=two, 5=three}
      println(map1)// 输出:{3=ONE, 3=TWO, 5=THREE}
      println(map2)
      
    • associateWith 直接使用集合元素作为键,并通过转换函数生成值。

    • 使用示例:

      val numbers = listOf("one", "two", "three")
      val map = numbers.associateWith { it.length }// 输出:{one=3, two=3, three=5}
      println(map)
      
    • associateTo 允许将键值对添加到目标 MutableMap 中,而不是直接返回新 Map。适用于增量构建 Map

    • 使用示例:

      val numbers = listOf("one", "two", "three")
      val targetMap = mutableMapOf<String, Int>()
      numbers.associateTo(targetMap) { it to it.length }// 输出:{one=3, two=3, three=5}
      println(targetMap)
      
  11. chunked(分块)通常指将数据或序列按固定大小分割成连续的块。每块的大小相同,块与块之间不重叠。

    • chunked使用示例
      val list = listOf(1, 2, 3, 4, 5, 6)
      val chunkedList = list.chunked(2) // 分块大小为2
      println(chunkedList) // 输出: [[1, 2], [3, 4], [5, 6]]
      
  12. windowed(滑动窗口)指按固定窗口大小滑动遍历数据或序列,窗口之间可以有重叠。

    • windowed示例

      val list = listOf(1, 2, 3, 4, 5)
      val windowedList = list.windowed(3) // 窗口大小为3
      println(windowedList) // 输出: [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
      
    • 带步长的windowed

      val windowedWithStep = list.windowed(3, step = 2) // 窗口步长为2
      println(windowedWithStep) // 输出: [[1, 2, 3], [3, 4, 5]]
      
    • 部分窗口(partialWindows)

      val list = listOf(1, 2, 3, 4)
      val partialResult = list.windowed(3, partialWindows = true)
      println(partialResult) // 输出: [[1, 2, 3], [2, 3, 4], [3, 4], [4]]
      
  13. 其他常用函数

    • sortedBy:按指定条件排序,返回新列表。例如:listOf(3, 1, 2).sortedBy { it } 输出 [1, 2, 3]
    • sortedByDescending:降序
    • sumBy:计算元素属性的和。例如:listOf("a", "ab").sumBy { it.length } 输出 3(长度和)。
    • takedrop:取前N个元素或跳过前N个元素。例如:listOf(1, 2, 3).take(2) 输出 [1, 2]
与 Map 扩展函数的比较

Kotlin 的 Map(如 Map<K, V>)也有类似扩展函数,但存在关键差异,因为 Map 是键值对集合,而 List 是索引序列。以下是主要异同点:

  • 相同点
    • 许多高阶函数名相同,如 mapfilterforEachanyallgroupBy 等,因为它们基于相同的高阶函数设计模式。
    • 函数含义类似:例如,map 用于转换元素,filter 用于过滤。
    • 使用实例相似(但参数需适应键值对):
      // Map 的 map 示例:转换每个键值对
      val map = mapOf("a" to 1, "b" to 2)
      val doubled = map.map { (key, value) -> "$key:${value * 2}" }  // 返回 List<String>
      println(doubled)  // 输出: ["a:2", "b:4"]
      
http://www.dtcms.com/a/544374.html

相关文章:

  • 重组蛋白与传统蛋白的区别:从来源到特性的全面解析
  • Ubuntu24.04 最小化发布 需要删除的内容
  • 深入理解 Rust 的 LinkedList:双向链表的实践与思考
  • 将一个List分页返回的操作方式
  • 使用Storage Transfer Service 事件驱动型 — 将AWS S3迁移到 GCP Cloud Storage
  • 苏州外贸网站建设赣州网上银行登录
  • Blender动画笔记
  • python学习之正则表达式
  • SCRM平台对比推荐:以企业微信私域运营需求为核心的参考
  • 廊坊网站搭建别墅装修案例
  • select/poll/epoll
  • VTK开发笔记(八):示例Cone5,交互器的实现方式,在Qt窗口中详解复现对应的Demo
  • k8s——资源管理
  • 【QML】001、QML与Qt Quick简介
  • 从0到1学习Qt -- 信号和槽(一)
  • 怎么给网站添加站点统计线上推广怎么做
  • k8s网络通信
  • 【仿RabbitMQ的发布订阅式消息队列】--- 前置技术
  • 在 Vue3 项目中使用 el-tree
  • JVM 字节码剖析
  • 乌兰浩特建设网站WordPress 任务悬赏插件
  • Docker篇3-app.py放在docker中运行的逻辑
  • FlagOS 社区 Triton 增强版编译器 FlagTree v0.3发布,性能全面提升,适配 12+ 芯片生态!
  • 复杂环境下驾驶员注意力实时检测: 双目深度补偿 + 双向 LSTM
  • 强化 门户网站建设wordpress添加视频插件吗
  • 用于电容器的绝缘材料中,所选用的电介质的相对介电常数应较大。用于制造电缆的绝缘材料中,所选用的电介质的相对介电常数应较小。
  • 用Lua访问DuckDB数据库
  • 制作人在那个网站能看情侣wordpress模板
  • Linux网络的HTTPS
  • 改进 shell 搜索