Kotlin Set 所有方法(按功能分类)

一、基础属性与判断
方法/属性 说明 示例
size: Int 集合元素数量 val set = setOf(1, 2, 3)
set.size // 3
isEmpty(): Boolean 判断是否为空集合 setOf<Int>().isEmpty() // true
isNotEmpty(): Boolean 判断是否为非空集合 setOf(1).isNotEmpty() // true
二、元素访问与检查
方法 说明 示例
contains(element: E): Boolean 判断是否包含指定元素 val set = setOf(1, 2, 3)
set.contains(2) // true
containsAll(elements: Collection<E>): Boolean 判断是否包含所有元素 val set = setOf(1, 2, 3)
set.containsAll(listOf(1, 3)) // true
first(): E 获取首个元素(空集合抛异常) setOf(1, 2).first() // 1
firstOrNull(): E? 获取首个元素(空集合返回 null) setOf<Int>().firstOrNull() // null
last(): E 获取最后一个元素(空集合抛异常) setOf(1, 2).last() // 2
lastOrNull(): E? 获取最后一个元素(空集合返回 null) setOf<Int>().lastOrNull() // null
elementAt(index: Int): E 获取指定索引元素(Set 无序,不建议使用) val set = setOf(1, 2, 3)
set.elementAt(0) // 1(顺序不保证)
elementAtOrNull(index: Int): E? 获取指定索引元素(越界返回 null) val set = setOf(1, 2)
set.elementAtOrNull(5) // null
三、迭代与遍历
方法 说明 示例
iterator(): Iterator<E> 返回迭代器 val set = setOf(1, 2, 3)
val it = set.iterator()
while (it.hasNext()) println(it.next())
forEach(action: (E) -> Unit) 遍历所有元素 val set = setOf(1, 2, 3)
set.forEach { print(it * 2) }
// 输出: 246
forEachIndexed(action: (Int, E) -> Unit) 带索引的遍历(索引不代表实际位置) val set = setOf(1, 2, 3)
set.forEachIndexed { i, v ->
println("索引 $i: $v")
}
四、转换操作
方法 说明 示例
toSet(): Set<E> 转换为不可变集合(本身为Set时返回自身) val set = setOf(1, 2)
set.toSet() // [1, 2]
toMutableSet(): MutableSet<E> 转换为可变集合 val set = setOf(1, 2)
val mutableSet = set.toMutableSet()
mutableSet.add(3) // [1, 2, 3]
toList(): List<E> 转换为列表 val set = setOf(1, 2, 3)
set.toList() // [1, 2, 3]
toTypedArray(): Array<E> 转换为数组 val set = setOf(1, 2, 3)
set.toTypedArray() // [1, 2, 3](数组)
plus(element: E): Set<E> 添加单个元素并返回新集合(重复元素会被忽略) val set = setOf(1, 2)
set.plus(3) // [1, 2, 3]
set.plus(2) // [1, 2](重复元素不添加)
plus(elements: Collection<E>): Set<E> 合并集合并返回新集合(去重) val set = setOf(1, 2)
set.plus(listOf(2, 3)) // [1, 2, 3]
minus(element: E): Set<E> 移除元素并返回新集合 val set = setOf(1, 2, 3)
set.minus(2) // [1, 3]
minus(elements: Collection<E>): Set<E> 移除多个元素并返回新集合 val set = setOf(1, 2, 3)
set.minus(listOf(2, 3)) // [1]
map(transform: (E) -> R): List<R> 元素转换(返回列表) val set = setOf(1, 2, 3)
set.map { it * 2 } // [2, 4, 6]
filter(predicate: (E) -> Boolean): Set<E> 过滤元素并返回新集合 val set = setOf(1, 2, 3, 4)
set.filter { it % 2 == 0 } // [2, 4]
五、查找与过滤
方法 说明 示例
first(predicate: (E) -> Boolean): E 首个满足条件的元素(无则抛异常) val set = setOf(1, 2, 3)
set.first { it > 1 } // 2
firstOrNull(predicate: (E) -> Boolean): E? 首个满足条件的元素(无则null) val set = setOf(1, 3, 5)
set.firstOrNull { it % 2 == 0 } // null
last(predicate: (E) -> Boolean): E 最后满足条件的元素(无则抛异常) val set = setOf(1, 2, 3)
set.last { it > 1 } // 3
lastOrNull(predicate: (E) -> Boolean): E? 最后满足条件的元素(无则null) val set = setOf(1, 3, 5)
set.lastOrNull { it % 2 == 0 } // null
single(): E 唯一元素(元素数不为1则抛异常) setOf(5).single() // 5
singleOrNull(): E? 唯一元素(元素数不为1则null) setOf(1, 2).singleOrNull() // null
single(predicate: (E) -> Boolean): E 唯一满足条件的元素(不满足则抛异常) setOf(1, 2, 3).single { it == 2 } // 2
singleOrNull(predicate: (E) -> Boolean): E? 唯一满足条件的元素(不满足则null) setOf(1, 2, 3, 4).singleOrNull { it % 2 == 0 } // null
find(predicate: (E) -> Boolean): E? 等同于 firstOrNull(predicate) val set = setOf(1, 2, 3)
set.find { it > 1 } // 2
findLast(predicate: (E) -> Boolean): E? 等同于 lastOrNull(predicate) val set = setOf(1, 2, 3)
set.findLast { it > 1 } // 3
filterNot(predicate: (E) -> Boolean): Set<E> 过滤不满足条件的元素 val set = setOf(1, 2, 3, 4)
set.filterNot { it % 2 == 0 } // [1, 3]
filterIsInstance<T>(): Set<T> 过滤指定类型的元素 val set = setOf(1, "a", 2, "b")
set.filterIsInstance<Int>() // [1, 2]
filterNotNull(): Set<E> 过滤非空元素(适用于 nullable 类型) val set = setOf(1, null, 3)
set.filterNotNull() // [1, 3]
六、集合运算
方法 说明 示例
union(other: Collection<E>): Set<E> 计算与另一个集合的并集 val set1 = setOf(1, 2)
val set2 = setOf(2, 3)
set1.union(set2) // [1, 2, 3]
intersect(other: Collection<E>): Set<E> 计算与另一个集合的交集 val set1 = setOf(1, 2)
val set2 = setOf(2, 3)
set1.intersect(set2) // [2]
subtract(other: Collection<E>): Set<E> 计算与另一个集合的差集 val set1 = setOf(1, 2)
val set2 = setOf(2, 3)
set1.subtract(set2) // [1]
containsAll(other: Collection<E>): Boolean 判断是否包含另一个集合的所有元素 val set1 = setOf(1, 2, 3)
val set2 = setOf(2, 3)
set1.containsAll(set2) // true
isEmpty(): Boolean 判断是否为空集 setOf<Int>().isEmpty() // true
isNotEmpty(): Boolean 判断是否为非空集 setOf(1).isNotEmpty() // true
七、统计与判断
方法 说明 示例
count(): Int 元素总数(等同于 size) setOf(1, 2, 3).count() // 3
count(predicate: (E) -> Boolean): Int 满足条件的元素数 setOf(1, 2, 3).count { it > 1 } // 2
sum(): E 元素总和(数值类型) setOf(1, 2, 3).sum() // 6
sumBy(selector: (E) -> Int): Int 按选择器计算总和 setOf("a", "ab", "abc").sumBy { it.length } // 6
sumByDouble(selector: (E) -> Double): Double 按选择器计算浮点总和 setOf(1.5, 2.5).sumByDouble { it } // 4.0
average(): Double 平均值(数值类型) setOf(1, 2, 3).average() // 2.0
maxOrNull(): E? 最大值 setOf(1, 3, 2).maxOrNull() // 3
minOrNull(): E? 最小值 setOf(1, 3, 2).minOrNull() // 1
maxByOrNull(selector: (E) -> Comparable<*>?): E? 按选择器取最大值元素 setOf("a", "ab").maxByOrNull { it.length } // "ab"
minByOrNull(selector: (E) -> Comparable<*>?): E? 按选择器取最小值元素 setOf("a", "ab").minByOrNull { it.length } // "a"
all(predicate: (E) -> Boolean): Boolean 是否所有元素满足条件 setOf(2, 4, 6).all { it % 2 == 0 } // true
any(predicate: (E) -> Boolean): Boolean 是否存在满足条件的元素 setOf(1, 3, 4).any { it % 2 == 0 } // true
none(predicate: (E) -> Boolean): Boolean 是否无元素满足条件 setOf(1, 3).none { it % 2 == 0 } // true
八、排序操作
方法 说明 示例
sorted(): List<E> 返回升序排序的列表(Set 本身无序,返回 List) val set = setOf(3, 1, 2)
set.sorted() // [1, 2, 3]
sortedDescending(): List<E> 返回降序排序的列表 val set = setOf(3, 1, 2)
set.sortedDescending() // [3, 2, 1]
sortedBy(selector: (E) -> Comparable<*>?): List<E> 按选择器结果升序排序(返回 List) val set = setOf("apple", "banana")
set.sortedBy { it.length } // [apple, banana]
sortedByDescending(selector: (E) -> Comparable<*>?): List<E> 按选择器结果降序排序(返回 List) val set = setOf("apple", "banana")
set.sortedByDescending { it.length } // [banana, apple]
sortedWith(comparator: Comparator<in E>): List<E> 按自定义比较器排序(返回 List) val set = setOf("b", "a", "c")
set.sortedWith(compareBy { it }) // [a, b, c]
九、其他常用方法
方法 说明 示例
toString(): String 转换为字符串表示 setOf(1, 2, 3).toString() // "[1, 2, 3]"
joinToString(separator: String = ", "): String 自定义字符串拼接 setOf(1, 2, 3).joinToString("; ") // "1; 2; 3"
equals(other: Any?): Boolean 判断内容是否相等 setOf(1, 2).equals(setOf(2, 1)) // true(Set 无序)
hashCode(): Int 计算哈希值 setOf(1, 2).hashCode() // 哈希值(因环境而异)
asSequence(): Sequence<E> 转换为序列(延迟计算) setOf(1, 2, 3).asSequence().map { it * 2 }.toSet() // [2,4,6]
onEach(action: (E) -> Unit): Set<E> 遍历元素并返回自身 setOf(1, 2).onEach { println(it) } // [1, 2]
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐