Kotlinでリストをコピーする方法は?
私は使っています
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
もっと簡単な方法はありますか?
これは正常に機能します。
val selectedSeries = series.toMutableList()
次の2つの方法を考え出すことができます。
1. val selectedSeries = mutableListOf<String>().apply { addAll(series) }
2. val selectedSeries = mutableListOf(*series.toTypedArray())
更新:新しい型推論エンジン(Kotlin 1.3のオプトイン)を使用すると、最初の例でジェネリック型パラメーターを省略して、これを使用できます。
1. val selectedSeries = mutableListOf().apply { addAll(series) }
参考:新しい推論をオプトインする方法は、コマンドラインではkotlinc -Xnew-inference ./SourceCode.kt
、Gradleではkotlin { experimental { newInference 'enable'}
です。新しい型推論の詳細については、このビデオを確認してください: KotlinConf 2018-Svetlana Isakova による新しい型推論と関連言語機能、特に「ビルダー向けの推論」 'at 30'
浅いコピーについては、
.map{it}
これは、多くのコレクションタイプで機能します。
使用できます
リスト-> toList()
配列-> toArray()
ArrayList-> toArray()
MutableList-> toMutableList()
例:
val array:ArrayList<String> = ArrayList()
array.add("1")
array.add("2")
array.add("3")
array.add("4")
val arrayCopy = array.toArray() // copy array to other array
Log.i("---> array " , array?.count().toString())
Log.i("---> arrayCopy " , arrayCopy?.count().toString())
array.removeAt(0) // remove first item in array
Log.i("---> array after remove" , array?.count().toString())
Log.i("---> arrayCopy after remove" , arrayCopy?.count().toString())
ログの印刷:
array: 4
arrayCopy: 4
array after remove: 3
arrayCopy after remove: 4
これは私のために働く
selectedSeries = ArrayList(series.map { it.copy() })