首页 > 解决方案 > 在 kotlin 中生成带有 lambda 的列表

问题描述

我是 Kotlin 和 lambdas 的新手,我正在努力理解它。我正在尝试生成一个包含 100 个随机数的列表。这有效:

private val maxRandomValues = (1..100).toList()

但我想做这样的事情:

private val maxRandomValues = (1..100).forEach { RandomGenerator().nextDouble() }.toList()

但这不起作用。我试图弄清楚如何使用生成的值forEach用于toList()

标签: lambdakotlin

解决方案


最好使用kotlin.collections函数来执行此操作:

List(100) {
    Random.nextInt()
}

根据Collections.kt

inline fun <T> List(size: Int, init: (index: Int) -> T): List<T> = MutableList(size, init)

在您的情况下,也可以使用范围生成:

(1..100).map { Random.nextInt() }

您不能使用的原因forEach是它返回Unit(这有点像voidJava、C# 等)。 map操作 Iterable(在这种情况下是range从 1 到 100 的数字)将它们映射到不同的值。然后它返回一个包含所有这些值的列表。在这种情况下,使用List上面的构造函数更有意义,因为您并不是真正“映射”值,而是创建一个列表


推荐阅读