🐻❄️
Kotlin の buildList を使って List を生成する
Kotlin の buildList を使って List を生成する
builstList とは
Kotlin v1.6 では buildList
というインライン関数がある。
@SinceKotlin("1.6")
@WasExperimental(ExperimentalStdlibApi::class)
@kotlin.internal.InlineOnly
public inline fun <E> buildList(@BuilderInference builderAction: MutableList<E>.() -> Unit): List<E> {
contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }
return buildListInternal(builderAction)
}
buildList
を利用すると以下のようにMutableList
の関数を利用して Listを
生成できる。
fun main() {
val list : List<String> = buildList {
add("1")
add("2")
add("3")
}
}
buildList では capacity を設定できる
buildList
には capacity
を設定できるインライン関数も用意されている。
@SinceKotlin("1.6")
@WasExperimental(ExperimentalStdlibApi::class)
@kotlin.internal.InlineOnly
public inline fun <E> buildList(capacity: Int, @BuilderInference builderAction: MutableList<E>.() -> Unit): List<E> {
contract { callsInPlace(builderAction, InvocationKind.EXACTLY_ONCE) }
return buildListInternal(capacity, builderAction)
}
buildList
のコードを読んでみたところ、内部では Array
を保持していて、Array
の初期サイズを決めるのにcapacity
が使われるらしい。
fun main() {
val list : List<String> = buildList(capacity = 3) {
add("1")
add("2")
add("3")
}
}
あくまでも生成速度の最適化に使われるパラメータっぽいので capacity
を超えて要素を追加しても特にエラーは発生しない。詳細は公式ドキュメントにも記載がなかったが巨大な List
を作らない限りは capacity
を設定する必要はなさそう。
Discussion