在kotlin中生成一个lambdas列表

Kil*_*zor 8 lambda kotlin

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

private val maxRandomValues = (1..100).toList()
Run Code Online (Sandbox Code Playgroud)

但是我想做那样的事情:

private val maxRandomValues = (1..100).forEach { RandomGenerator().nextDouble() }.toList()
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我正在试图弄清楚如何使用生成的值forEach来使用toList()

Ser*_*kin 14

使用kotlin.collections函数执行此操作会更好:

List(100) {
    Random.nextInt()
}
Run Code Online (Sandbox Code Playgroud)

根据 Collections.kt

inline fun <T> List(size: Int, init: (index: Int) -> T): List<T> = MutableList(size, init)
Run Code Online (Sandbox Code Playgroud)

也可以像你的情况一样生成使用范围:

(1..100).map { Random.nextInt() }
Run Code Online (Sandbox Code Playgroud)

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

  • @Killrazor让我们逐步检查:1. List(10,(index:Int)-&gt; {index * index}) (2认同)
  • @Killrazor Kotlin允许省略2。List(10,{index * index}) (2认同)
  • @Killrazor,如果它是lambda 3,则可以将最后一个参数移出()大括号:3:List(10){index * index} (2认同)