1. 概述
在本教程中,我们将学习如何在 Kotlin 中创建包含重复元素的集合。这在某些特定场景下非常实用,比如初始化默认值、测试数据准备等。
Kotlin 提供了多种简洁而灵活的方式,可以快速创建包含重复元素的 List
、MutableList
、Array
甚至是 CharSequence
。
2. 创建包含重复元素的集合
✅ 使用 List(size: Int, init: (index: Int) -> T)
构造函数
从 Kotlin 1.1 开始,我们可以使用 List
构造函数创建一个只读列表,并通过 lambda 表达式初始化每个元素:
val repeated = List(3) { index -> "Hello" }
assertThat(repeated).hasSize(3)
assertThat(repeated.toSet()).containsExactly("Hello")
上面的代码创建了一个包含 3 个 "Hello"
元素的列表。由于我们并没有使用 index
参数,因此可以将其替换为下划线 _
:
val repeated = List(3) { _ -> "Hello" }
甚至可以更简洁地省略下划线(Kotlin 默认使用 it
作为参数名,但我们并未使用它):
val repeated = List(3) { "Hello" }
✅ 创建其他类型的集合
同样的方式也适用于其他集合类型,例如:
val mutable = MutableList(3) { "Hello" }
assertThat(mutable.toSet()).containsExactly("Hello")
val charArray = CharArray(3) { 'H' }
assertThat(charArray.toSet()).containsExactly('H')
val array = Array(3) { "Hello" }
assertThat(array.toSet()).containsExactly("Hello")
val intArray = IntArray(3) { 42 }
assertThat(intArray.toSet()).containsExactly(42)
这些方法都非常直观,适用于大多数基础类型和对象类型。
✅ 使用 generateSequence()
创建重复序列
如果你需要创建一个惰性求值的无限重复序列,可以使用 generateSequence
:
val repeated = generateSequence { "Hello" }.take(3).toList()
assertThat(repeated).hasSize(3)
assertThat(repeated.toSet()).containsExactly("Hello")
这里我们从无限序列中取前 3 个元素,并将其转换为列表。
⚠️ 注意:这种方式适用于需要延迟加载或处理大数据流的场景,但如果你只需要一个固定大小的集合,推荐使用前面介绍的构造函数方式,更简洁高效。
3. 小结
本教程中,我们介绍了如何在 Kotlin 中创建包含重复元素的多种集合类型,包括:
List
MutableList
Array
CharArray
、IntArray
等基本类型数组- 使用
generateSequence
创建惰性序列
这些方法都简洁高效,适用于不同的使用场景。你可以根据实际需求选择最合适的方式。
完整示例代码已上传至 GitHub:点击查看