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

1.kotlin数组、集合常用方法

一、Array(数组)

创建方法

方法说明示例
arrayOf()创建数组val arr = arrayOf(1, 2, 3)
arrayOfNulls()创建指定大小的空数组val nullArr = arrayOfNulls<String>(3)
Array() 构造函数通过函数初始化val squares = Array(5) { i -> i * i }

常用方法

方法说明示例
size获取数组大小arr.size // 3
get(index)获取指定位置元素arr.get(0) // 1
set(index, value)设置指定位置元素arr.set(1, 5)
contains(element)检查是否包含元素arr.contains(2) // true
indexOf(element)获取元素索引arr.indexOf(3) // 2
forEach { }遍历数组arr.forEach { println(it) }
map { }转换数组arr.map { it * 2 } // [2, 4, 6]
filter { }过滤元素arr.filter { it > 1 } // [2, 3]
sort()排序(可变数组)arr.sort()
sliceArray(indices)切片arr.sliceArray(0..1) // [1, 2]
joinToString()连接为字符串arr.joinToString("-") // "1-2-3"

二、List(列表)

创建方法

方法说明示例
listOf()创建不可变列表val list = listOf("a", "b", "c")
mutableListOf()创建可变列表val mList = mutableListOf(1, 2, 3)
emptyList()创建空列表val empty = emptyList<Int>()
List(3) { "TZ" }创建3个相同的元素TZList(3) { "TZ" } // "a, b, c"

通用方法(不可变/可变)

方法说明示例
size获取列表大小list.size // 3
get(index)获取指定位置元素list[1] // "b"
indexOf(element)获取元素索引list.indexOf("c") // 2
contains(element)检查是否包含元素list.contains("a") // true
subList(from, to)获取子列表list.subList(0, 2) // ["a", "b"]
forEach { }遍历列表list.forEach { print(it) }
map { }转换列表list.map { it.uppercase() } // [A, B, C]
filter { }过滤元素list.filter { it != "b" } // ["a", "c"]
any { }检查是否有元素满足条件list.any { it == "b" } // true
all { }检查所有元素满足条件list.all { it.length == 1 } // true
none { }检查没有元素满足条件list.none { it == "d" } // true
first()获取第一个元素list.first() // "a"
last()获取最后一个元素list.last() // "c"
sorted()排序(返回新列表)list.sorted() // 自然顺序
reversed()反转列表list.reversed() // ["c", "b", "a"]
joinToString()连接为字符串list.joinToString() // "a, b, c"
listOfNotNull(element)自动去除所有null元素,再创建只读列表val array = arrayOf("A", null, "C");
val list: List<String> = listOfNotNull(*array)

可变列表特有方法

方法说明示例
add(element)添加元素mList.add(4)
add(index, element)在指定位置添加元素mList.add(0, 0)
remove(element)移除元素mList.remove(2)
removeAt(index)移除指定位置元素mList.removeAt(0)
set(index, element)修改指定位置元素mList[1] = 10
clear()清空列表mList.clear()
sort()原地排序mList.sort()
shuffle()随机打乱mList.shuffle()

三、Set(集合)

创建方法

方法说明示例
setOf()创建不可变集合val set = setOf(1, 2, 3)
mutableSetOf()创建可变集合val mSet = mutableSetOf("a", "b")
hashSetOf()创建HashSetval hashSet = hashSetOf(1.0, 2.0)
sortedSetOf()创建SortedSetval sortedSet = sortedSetOf(3, 1, 2)

通用方法(不可变/可变)

方法说明示例
size获取集合大小set.size // 3
contains(element)检查是否包含元素set.contains(2) // true
isEmpty()检查是否为空set.isEmpty() // false
isNotEmpty()检查是否非空set.isNotEmpty() // true
forEach { }遍历集合set.forEach { println(it) }
filter { }过滤元素set.filter { it > 1 } // [2, 3]
map { }转换集合set.map { it * 2 } // [2, 4, 6]
any { }检查是否有元素满足条件set.any { it % 2 == 0 } // true
all { }检查所有元素满足条件set.all { it < 5 } // true
union(other)并集set.union(setOf(3, 4)) // [1,2,3,4]
intersect(other)交集set.intersect(setOf(2,3)) // [2,3]
minus(other)差集set.minus(setOf(3)) // [1,2]

可变集合特有方法

方法说明示例
add(element)添加元素mSet.add("c")
remove(element)移除元素mSet.remove("a")
clear()清空集合mSet.clear()
retainAll(other)保留交集mSet.retainAll(setOf("b", "c"))
addAll(other)添加多个元素mSet.addAll(listOf("d", "e"))

四、Map(映射)

创建方法

方法说明示例
mapOf()创建不可变映射val map = mapOf(1 to "a", 2 to "b")
mutableMapOf()创建可变映射val mMap = mutableMapOf("k1" to 1, "k2" to 2)
hashMapOf()创建HashMapval hashMap = hashMapOf(1 to "x", 2 to "y")
linkedMapOf()创建LinkedHashMapval linkedMap = linkedMapOf("a" to 1, "b" to 2)

通用方法(不可变/可变)

方法说明示例
size获取映射大小map.size // 2
keys获取所有键map.keys // [1, 2]
values获取所有值map.values // ["a", "b"]
entries获取所有键值对map.entries
isEmpty()检查是否为空map.isEmpty() // false
containsKey(key)检查是否包含键map.containsKey(1) // true
containsValue(value)检查是否包含值map.containsValue("b") // true
get(key)获取键对应值map[2] // "b"
getOrDefault(key, default)安全获取值map.getOrDefault(3, "c") // "c"
forEach { }遍历映射map.forEach { k, v -> println("$k: $v") }
filter { }过滤键值对map.filter { (k, v) -> k > 1 && v.startsWith("b") }
mapKeys { }转换键map.mapKeys { it.key * 2 } // {2="a", 4="b"}
mapValues { }转换值map.mapValues { it.value.uppercase() } // {1="A", 2="B"}
any { }检查是否有键值对满足条件map.any { it.key == 2 } // true
all { }检查所有键值对满足条件map.all { it.value is String } // true

可变映射特有方法

方法说明示例
put(key, value)添加/更新键值对mMap.put("k3", 3)
remove(key)移除键值对mMap.remove("k1")
clear()清空映射mMap.clear()
putAll(other)添加多个键值对mMap.putAll(mapOf("k4" to 4, "k5" to 5))
getOrPut(key) { value }获取或创建值mMap.getOrPut("new") { 100 }
compute(key) { }计算新值mMap.compute("k1") { k, v -> v?.times(2) }

五、通用集合方法

以下方法适用于所有集合类型(Array, List, Set, Map):

方法说明示例
isEmpty()检查是否为空list.isEmpty()
isNotEmpty()检查是否非空set.isNotEmpty()
count()获取元素数量map.count()
count { predicate }统计满足条件的元素arr.count { it > 5 }
first()获取第一个元素list.first()
first { predicate }获取第一个满足条件的元素set.first { it % 2 == 0 }
last()获取最后一个元素list.last()
last { predicate }获取最后一个满足条件的元素arr.last { it < 10 }
maxOrNull()获取最大值listOf(1,5,2).maxOrNull() // 5
minOrNull()获取最小值setOf(3,1,4).minOrNull() // 1
sum()求和(数值集合)listOf(1,2,3).sum() // 6
average()求平均值arrayOf(1.0, 2.0, 3.0).average() // 2.0
distinct()去重listOf(1,2,2,3).distinct() // [1,2,3]
groupBy { }按条件分组list.groupBy { it.length }
associateBy { }创建映射list.associateBy { it.id }
partition { }分区val (even, odd) = list.partition { it % 2 == 0 }
zip(other)合并两个集合listOf(1,2).zip(listOf("a","b")) // [(1,"a"), (2,"b")]
take(n)取前n个元素list.take(2)
drop(n)丢弃前n个元素set.drop(1)
chunked(size)分块list.chunked(3)
windowed(size)滑动窗口list.windowed(2)
fold(initial) { }累积操作list.fold(0) { acc, i -> acc + i }
reduce { }累积操作(无初始值)array.reduce { acc, i -> acc * i }
filterIsInstance<T>()过滤集合,返回指定类型T的元素组成的列表list.filterIsInstance<String>()
filterIsInstanceTo(destination)将集合中指定类型T的元素添加到目标集合destinationlist.filterIsInstanceTo(destList)
http://www.dtcms.com/a/314508.html

相关文章:

  • Day31:文件的规范拆分与写法
  • 三维模型轻量化双杀技:GISBox的纹理压缩与顶点压缩联合
  • 交叉验证:原理、作用与在机器学习流程中的位置
  • 【笔记】ROS1|1 ROS基本命令介绍及创建工作空间与功能包【旧文转载】
  • 从知识管理到智能协作:Gitee Wiki如何重塑软件研发效率范式
  • AI聊天:虚拟主播的角色提示词
  • HTTPS有哪些优点
  • LLM嵌入特征工程
  • Coze Studio 概览(七)--记忆管理功能
  • 单调栈|图
  • 电脑上不了网怎么办?【图文详解】wifi有网络但是电脑连不上网?网络设置
  • 【C++】——类和对象(下)
  • SpringBoot3.x入门到精通系列:3.3 整合 Elasticsearch 详解
  • Oracle EBS ERP接口开发 — 修复bug基本流程
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:气动人工肌肉PAM及其对材料技术要求与限制
  • 安装MySQL可视化管理工具DBeaver教程
  • Armoury Crate无法通过BIOS卸载
  • 微信小程序本地存储与Cookie的区别
  • 华为OD机考2025C卷 - 开源项目热度榜单 (Java Python JS C++ C )
  • Java反射的Field
  • 消息系统技术文档
  • 抽像代数概念理解——陪集(coset)
  • 华为2288H V5服务器闪红灯 无法开机案例
  • SpringBoot整合t-io是websocket实时通信
  • 题单【排序】
  • linux中 多进程 导致cuda错误的问题解决
  • 【测试】⾃动化测试常⽤函数
  • 配置Mybatis环境
  • 向量魔法:Embedding如何赋能大模型理解世界
  • 靶场(二十八)---小白心得靶场体会---Mantis