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

Kotlin List 操作全面指南

在传统 Java 开发 List 相关的 API 中,有着样板代码冗长、缺乏链式调用、空安全等问题。

Kotlin 这门语言 为 List 提供了丰富的扩展函数,这些函数大大简化了集合操作,解决了传统 Java 集合 API 中的许多痛点。


一、基础操作

1. 创建 List

val list = listOf(1, 2, 3) // 不可变
val mutableList = mutableListOf(1, 2, 3) // 可变
val emptyList = emptyList<Int>() // 空列表

 2. 访问元素

val element = list[1]                 // index 访问
val elementOrNull = list.getOrNull(5) // index 访问元素(失败返回 null)val first = list.first()            // 访问第一个元素
val firstOrNull= list.firstOrNull() // 访问第一个元素(失败返回 null)val last = list.last()              // 访问最后一个元素
val lastOrNull= list.lastOrNull()   // 访问最后一个元素(失败返回 null)

二、转换操作

1. 映射转换

val doubled = list.map { it * 2 } // [1,2,3] → [2,4,6]

 在复杂的数据 bean list 中,使用 map 能快速提取某一个字段组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("李四", 28))
}
val nameList = personList.map { it.name } // ["张三", "李四"]
val ageList = personList.map { it.age }    // [22, 28]

2. 扁平化

val nested = listOf(listOf(1, 2), listOf(3, 4))
val flat = nested.flatten() // [1,2,3,4]
val flatMapped = nested.flatMap { it.map { it * 2 } } // [2,4,6,8]

三、过滤操作

1. 基本过滤

val list = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val filterList = list.filter { it % 2 == 0 } // [2, 4, 6, 8]

 在复杂的数据 bean list 中,使用 filter 能快速根据业务条件的字段组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("李四", 28))add(Person("王五", 31))
}
val filterList = personList.filter{ it.age > 25 } // [Person("李四", 28), Person("王五", 31)]

2. 去重

val list = listOf(1, 2, 2, 3, 1)
val distinctList = list.distinct() // [1,2,3]

四、排序操作

1. 升/降序

val list = listOf(3, 1, 4, 1, 5)
val sorted = list.sorted()               // [1, 1, 3, 4, 5]  (升序排列)
val descending = list.sortedDescending() // [5, 4, 3, 1, 1]  (降序排列)val customSorted = list.sortedBy { it.length } // 对对象列表按属性排序

在复杂的数据 bean list 中,使用 sortedBy/sortedByDescending 能快速根据字段进行排序组成新的 list:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("王五", 31))add(Person("李四", 28))add(Person("老六", 20))
}
val ascendingList = personList.sortedBy { it.age } // [Person("老六", 20), Person("张三", 22), Person("李四", 28), Person("王五", 31)]
val DescendingList = personList.sortedByDescending { it.age } // [Person("王五", 31), Person("李四", 28), Person("张三", 22), Person("老六", 20)]

 2.反转顺序

val list = listOf('a', 'b', 'c')
list.reversed() // ['c', 'b', 'a']

五、聚合操作

1. 求和/平均

val list = listOf(1, 2, 3, 4)
val sum = list.sum()          // 10
val average = list.average()  // 2.5

在复杂的数据 bean list 中,使用 sumOf 能快速计算 list 中字段的总和

class Product(val name: String, val price: Int)val productList = mutableListOf<Product>().apply {add(Product("西红柿", 5))add(Product("香蕉", 7))add(Product("苹果", 3))add(Product("菠萝", 10))
}
val priceSum = list.sumOf { it.price } // 价格总和: 25

2. 最大/最小

val list = listOf(1, 2, 3, 4)
val min = list.min() // 最小值: 1
val max = list.max() // 最大值: 4

3. 统计

val list = listOf(1, 2, 3, 4)
val count = list.count { it >= 2 } // list中大于等于2的item数量: 3

六、查找操作

1. 查找元素

val list = listOf(1, 2, 3, 4, 5, 6)
val find = list.find { it > 3 } // 查找第一个大于3的数(失败返回null)

 在复杂的数据 bean list 中,使用 find 能快速寻找某个字段值对应的数据 bean:

class Person(val name: String, val age: Int)val personList = mutableListOf<Person>().apply {add(Person("张三", 22))add(Person("王五", 31))add(Person("李四", 28))add(Person("老六", 20))
}
val zhangsan = personList.find { it.name = "张三" } // 根据 name 查找 list 中的数据 bean

2. 条件检查

val list = listOf(1, 2, 3, 4, 5, 6)
val any = list.any { it > 7 } // list 中是否 有元素 大于7
val all = list.all { it > 0 } // list 中是否 所有元素 大于0

七、集合操作

1. 合并

val list1 = listOf(1, 2, 3, 4, 5, 6)
val list2 = listOf("a", "b")
val zip = list1.zip(list2)  // [(1, a), (2, b)]
val zipWithNext = list1.zipWithNext() // [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

2. 集合运算

val list1 = listOf(1, 2, 3, 4, 5)
val list2 = listOf(5, 6, 7, 8, 9)
val union = list1 + list2              // 并集: [1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
val intersect = list1.intersect(list2) // 交集: [5]
val subtract1 = list1.subtract(list2)  // 差集: [1, 2, 3, 4]
val subtract2 = list2.subtract(list1)  // 差集: [6, 7, 8, 9]

八、其他

1. 遍历

list.forEach { println(it) }
list.forEachIndexed { index, value -> println("$index: $value") }

2. 随机元素

val random = list.random()

3. 字符串连接

val list = listOf(1, 2, 3, 4, 5)
val joinToString = list.joinToString(", ", "[", "]") // [1, 2, 3, 4, 5]
http://www.lqws.cn/news/96985.html

相关文章:

  • RabbitMQ 监控与调优实战指南(二)
  • JavaScript性能优化实战大纲
  • Neovim - 打造一款属于自己的编辑器(一)
  • 提取 PDF 文件中的文字以及图片中的文字
  • HALCON 深度学习训练 3D 图像的几种方式优缺点
  • 论文中pdf图片文件太大怎么办
  • 关于FPGA软核的仿真(一)
  • 基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案
  • 云计算 Linux Rocky day03
  • YAML文件
  • 什么是AI芯片?
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(六):图片上传功能
  • ArcGIS Pro字段计算器与计算几何不可用,显示灰色
  • 二分查找的边界艺术:LeetCode 34 题深度解析
  • 第七部分:阶段项目 5:构建 NestJS + MySQL RESTful API 服务器
  • 基于Python学习《Head First设计模式》第五章 单件模式
  • Matlab实现LSTM-SVM回归预测,作者:机器学习之心
  • Matlab自学笔记五十七:符号运算、可变精度运算、双精度浮点型运算,三种运算精度的概念、比较、选择和应用
  • ssh登录wsl2
  • 关于 java:6. 反射机制
  • 【C++】特殊类设计
  • 开疆智能Profinet转Profibus网关连接CMDF5-8ADe分布式IO配置案例
  • 人工智能-Chain of Thought Prompting(思维链提示,简称CoT)
  • 2025 Java面试大全技术文章大纲
  • 【Linux】linux基础指令
  • 预警功能深度测评:系统如何降低设备突发故障率?
  • 职坐标IT培训:嵌入式开发C语言/硬件/RTOS路径
  • ElasticSearch+Gin+Gorm简单示例
  • 黑客利用GitHub现成工具通过DevOps API发起加密货币挖矿攻击
  • 计算机基础知识(第三篇)