🐻❄️
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