使用kotlin中的lambdas生成列表

使用kotlin中的lambdas生成列表,lambda,kotlin,Lambda,Kotlin,我是科特林和兰博达斯的新手,我正在努力理解它。我正在尝试生成一个包含100个随机数的列表。 这项工作: private val maxRandomValues = (1..100).toList() 但我想这样做: private val maxRandomValues = (1..100).forEach { RandomGenerator().nextDouble() }.toList() 但这是行不通的。我正在试图找出如何使用生成到forEach中的值,这些值用于toList()最好使

我是科特林和兰博达斯的新手,我正在努力理解它。我正在尝试生成一个包含100个随机数的列表。 这项工作:

private val maxRandomValues = (1..100).toList()
但我想这样做:

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

但这是行不通的。我正在试图找出如何使用生成到
forEach
中的值,这些值用于
toList()

最好使用
kotlin.collections
函数:

List(100) {
    Random.nextInt()
}
根据
Collections.kt

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

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

示例的问题是
forEach
不返回值。在@Sergey Rybalkin的回答中,他们使用了
map
。我使用了List(100){Random.nextInt()}语句。我不明白的是这种结构(集合构造函数和主体)的起源是什么。我从冗长的java中跳出来,完全迷失了方向。@Killrazor让我们一步一步地检查:1。List(10,(index:Int)->{index*index}@killrazorkotlin允许省略2。List(10,{index*index})@Killrazor如果最后一个参数是lambda3:List(10){index*index},则可以将它移出()大括号
(1..100).map { Random.nextInt() }