web-dev-qa-db-ja.com

Kotlinでラムダを含むリストを生成する

私はコトリンとラムダを初めて使い、理解しようとしています。 100個の乱数のリストを生成しようとしています。これは機能します:

_private val maxRandomValues = (1..100).toList()
_

しかし、私はそのようなことをしたいです:

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

しかし、これは機能していません。 forEachに生成された値をtoList()で使用する方法を理解しようとしています

10
Killrazor

これを行うには、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を返すためです(これは、Java、C#などのvoidのようなものです)。 mapIterable(この場合は1から100までの数のrange)をmapを別の値に演算します。次に、それらすべての値を含むリストを返します。この場合、実際に値を「マッピング」するのではなく、リストを作成するため、上記のListコンストラクターを使用する方が理にかなっています。

16
Sergei Rybalkin