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

Kotlin 集合常用操作

以下是 Kotlin 集合常用操作的 8 大分类:

#分类代表操作
1创建listOf·mutableListOf·mapOf·buildList·List(n){}
2转换map·flatMap·zip·associate·partition·chunked
3过滤filter·filterIsInstance·take/drop·distinct·filterNotNull
4聚合fold·reduce·sumOf·count·minBy/maxBy·joinToString
5排序sorted·sortedBy·sortedWith·reversed·shuffled
6查找find·first/last·any/all/none·contains·indexOf
7分组groupBy·groupingBy().eachCount()
8集合运算union·intersect·subtract·plus/minus·forEach

一、创建集合

kotlin

// Listvallist=listOf(1,2,3,4,5)// 不可变valmutableList=mutableListOf(1,2,3)// 可变// Setvalset=setOf(1,2,3,3)// {1, 2, 3} 自动去重valmutableSet=mutableSetOf(1,2,3)// Mapvalmap=mapOf("a"to1,"b"to2)// 不可变valmutableMap=mutableMapOf("a"to1)// 可变// 其他方式vallistFromRange=(1..5).toList()// [1, 2, 3, 4, 5]vallistBuilt=buildList{add(1);add(2)}// 构建器方式

二、元素访问

kotlin

vallist=listOf(10,20,30,40,50)list[0]// 10,按索引访问list.first()// 10,第一个元素list.last()// 50,最后一个元素list.getOrNull(10)// null,越界返回 nulllist.getOrElse(10){-1}// -1,越界返回默认值valmap=mapOf("a"to1,"b"to2)map["a"]// 1map.getOrDefault("c",0)// 0map.getValue("a")// 1,不存在则抛异常

三、遍历

kotlin

vallist=listOf("a","b","c")// forEachlist.forEach{println(it)}// forEachIndexedlist.forEachIndexed{index,value->println("$index:$value")}// for 循环for(iteminlist)println(item)// 遍历 Mapvalmap=mapOf("x"to1,"y"to2)map.forEach{(k,v)->println("$k->$v")}

四、转换操作

kotlin

vallist=listOf(1,2,3,4,5)// map:映射每个元素list.map{it*2}// [2, 4, 6, 8, 10]// mapIndexed:带索引映射list.mapIndexed{i,v->"$i:$v"}// ["0:1", "1:2", ...]// flatMap:展平嵌套集合listOf(1,2,3).flatMap{listOf(it,it*10)}// [1, 10, 2, 20, 3, 30]// flatten:直接展平listOf(listOf(1,2),listOf(3,4)).flatten()// [1, 2, 3, 4]// zip:合并两个集合listOf(1,2,3).zip(listOf("a","b","c"))// [(1,a), (2,b), (3,c)]// unzip:拆分 Pair 列表listOf(1to"a",2to"b").unzip()// ([1, 2], [a, b])// associate:转为 Maplist.associate{ittoit*it}// {1=1, 2=4, 3=9, 4=16, 5=25}list.associateBy{it*10}// {10=1, 20=2, ...}

五、过滤操作

kotlin

vallist=listOf(1,2,3,4,5,6)// filter:保留满足条件的元素list.filter{it%2==0}// [2, 4, 6]// filterNot:保留不满足条件的元素list.filterNot{it%2==0}// [1, 3, 5]// filterIsInstance:按类型过滤listOf(1,"a",2,"b").filterIsInstance<String>()// ["a", "b"]// filterNotNull:过滤 nulllistOf(1,null,2,null).filterNotNull()// [1, 2]// partition:按条件分成两组val(evens,odds)=list.partition{it%2==0}// evens=[2,4,6], odds=[1,3,5]// take / droplist.take(3)// [1, 2, 3]list.drop(3)// [4, 5, 6]list.takeWhile{it<4}// [1, 2, 3]list.dropWhile{it<4}// [4, 5, 6]

六、排序操作

kotlin

vallist=listOf(3,1,4,1,5,9,2,6)list.sorted()// [1, 1, 2, 3, 4, 5, 6, 9]list.sortedDescending()// [9, 6, 5, 4, 3, 2, 1, 1]// 按指定字段排序dataclassPerson(valname:String,valage:Int)valpeople=listOf(Person("Bob",30),Person("Alice",25),Person("Tom",28))people.sortedBy{it.age}// Alice(25), Tom(28), Bob(30)people.sortedByDescending{it.name}// Tom, Bob, Alice// 多字段排序people.sortedWith(compareBy({it.age},{it.name}))// 反转list.reversed()// [6, 2, 9, 5, 1, 4, 1, 3]

七、聚合操作

kotlin

vallist=listOf(1,2,3,4,5)list.sum()// 15list.count()// 5list.count{it>3}// 2list.average()// 3.0list.min()// 1list.max()// 5list.minOrNull()// 1(推荐,避免空集合异常)list.maxOrNull()// 5// reduce:无初始值聚合list.reduce{acc,i->acc+i}// 15// fold:有初始值聚合list.fold(10){acc,i->acc+i}// 25// sumOf / maxOf / minOflist.sumOf{it*2}// 30list.maxOf{it*it}// 25list.minOf{it+10}// 11

八、分组操作

kotlin

vallist=listOf(1,2,3,4,5,6)// groupBy:按条件分组list.groupBy{if(it%2==0)"even"else"odd"}// {odd=[1,3,5], even=[2,4,6]}// chunked:按固定大小分块list.chunked(2)// [[1,2], [3,4], [5,6]]// windowed:滑动窗口list.windowed(3)// [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]list.windowed(3,step=2)// [[1,2,3],[3,4,5]]

九、查找操作

kotlin

vallist=listOf(1,2,3,4,5)list.find{it>3}// 4,第一个满足的list.findLast{it>3}// 5,最后一个满足的list.any{it>4}// truelist.all{it>0}// truelist.none{it>10}// truelist.contains(3)// truelist.indexOf(3)// 2list.lastIndexOf(3)// 2list.binarySearch(3)// 需先排序,返回索引 2

十、集合运算

kotlin

vala=setOf(1,2,3,4)valb=setOf(3,4,5,6)a union b// {1,2,3,4,5,6} 并集a intersect b// {3,4} 交集a subtract b// {1,2} 差集// List 也支持 + / - 运算符listOf(1,2,3)+listOf(4,5)// [1,2,3,4,5]listOf(1,2,3,2)-listOf(2)// [1,3]

十一、可变集合操作

kotlin

vallist=mutableListOf(1,2,3)list.add(4)// [1,2,3,4]list.add(0,0)// [0,1,2,3,4]list.remove(2)// 移除值为2的元素list.removeAt(0)// 移除索引0list.set(0,99)// 替换索引0list.clear()// 清空valmap=mutableMapOf("a"to1)map["b"]=2// 添加/更新map.remove("a")// 删除map.getOrPut("c"){3}// 不存在则添加并返回

十二、序列(Sequence)—— 惰性求值

kotlin

// 普通集合:每步都创建中间集合valresult1=(1..1_000_000).filter{it%2==0}.map{it*3}.take(5)// Sequence:惰性求值,性能更好valresult2=(1..1_000_000).asSequence().filter{it%2==0}.map{it*3}.take(5).toList()// [6, 12, 18, 24, 30]// generateSequence:生成无限序列valfibs=generateSequence(Pair(0,1)){Pair(it.second,it.first+it.second)}.map{it.first}.take(8).toList()
http://www.jsqmd.com/news/687149/

相关文章:

  • 终极图片格式转换指南:Save Image as Type让网页图片保存更简单
  • 别再被JavaCV的FFmpegFrameGrabber卡住了!手把手教你解决start()阻塞和Picture size 0x0错误
  • gprMax三维建模效率翻倍:我是如何用Paraview可视化分析随机介质雷达模拟结果的
  • AD20 原理图与PCB同步的隐藏技巧:用‘文档比较’搞定多对多更新
  • 有关CH585三模例程中RF低功耗睡眠处理的讲解
  • Steam Achievement Manager:重新定义你的游戏成就掌控权
  • 如何快速掌握RePKG:Wallpaper Engine资源提取与转换的终极指南
  • TVA技术在化工行业视觉检测的最新进展(3)
  • 2026年收藏必备:保姆级教你搞定论文AIGC率(附平台测评+独家去AI痕迹工具) - 降AI实验室
  • 终极指南:5个技巧让Obsidian表格管理效率提升90%
  • 电源噪声抑制减少高速时钟抖动基础手段
  • 赛博朋克2077存档编辑器:3步解锁夜之城无限可能
  • 文档插件《道斯通图》不震撼首发 免费下载直接使用
  • React Hook 性能调优与重复渲染问题
  • 终极指南:深度定制你的《赛博朋克2077》游戏体验
  • 审批流和状态机到底怎么选?一次讲清规则边界、适用场景与系统设计取舍
  • 深圳市场地位认证机构推荐指南 - 速递信息
  • 别再瞎用_nop_()了!51单片机I2C时序不准的锅,原来是函数调用在捣鬼
  • 终极指南:如何用VisualCppRedist AIO一键解决所有Windows运行库问题
  • 2026年4月5款维普降AI率软件盘点:嘎嘎降AI和率零领先
  • 2026年石墨制品厂家推荐排行榜:涵盖石墨电极、石墨坩埚、石墨回收,适配冶金/钢铁/铸造/化工行业全场景解决方案深度解析 - 海棠依旧大
  • 如何在VMware中解锁macOS虚拟机:终极免费解决方案指南
  • Qwen3.5-2B端侧部署实测:Jetson Orin NX运行可行性验证
  • NsEmuTools:NS模拟器自动化管理效率工具
  • 热门的在线PH检测仪哪家好?深度测评十大流量计品牌 - 仪表人小余
  • 如何用OpenVINO AI插件让Audacity拥有专业级音频处理能力?
  • 5分钟掌握kill-doc:30+文档平台免费下载终极方案
  • 量子计算框架C2|Q⟩的设计与电路转译技术解析
  • 告别fbtft!在香橙派Zero上为1.3寸ST7789V屏幕编译TinyDRM驱动(附完整设备树配置)
  • Claude 4.7 Opus 登陆 AWS Bedrock:Agentic Coding 实测数据与接入方案解析