1. 概述

在本教程中,我们将学习如何在 Kotlin 中创建包含重复元素的集合。这在某些特定场景下非常实用,比如初始化默认值、测试数据准备等。

Kotlin 提供了多种简洁而灵活的方式,可以快速创建包含重复元素的 ListMutableListArray 甚至是 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
  • CharArrayIntArray 等基本类型数组
  • 使用 generateSequence 创建惰性序列

这些方法都简洁高效,适用于不同的使用场景。你可以根据实际需求选择最合适的方式。

完整示例代码已上传至 GitHub:点击查看


原始标题:Creating Collections with Repeating Elements in Kotlin